解决Visual Studio Code程序运行后外部终端界面闪退的问题

文章介绍了在VSCode中运行C语言程序时遇到外部输出终端闪退的常见问题,以及三种解决方案:1)修改launch.json配置,2)在代码中添加`system(pause)`,3)使用`getchar()`函数。作者提醒,某些方案可能影响调试,并提供了相关参考资料。
摘要由CSDN通过智能技术生成

场景:
背景:在vscode下运行C语言程序时,总会出现外部输出终端界面闪退的情况,在查看了许多资料后,终于解决了问题,写下这篇文章记录一下自己解决问题的过程。


问题描述

代码运行后外部输出界面闪退:

// 输入一批学生的成绩,找出最高分
#include <stdio.h>
int main(void)
{
    int grade, max;
    grade = 0;
    max = 0;
    while (grade >= 0)
    { // 因为成绩不可能为负,故设定一个伪数据作为循环结束的标志
        printf("enter grade:");
        scanf("%d", &grade);
        if (grade > max)
        {
            max = grade;
        }
    }

    printf("最高分为:%d\n", max);
}

在运行上述代码段后,按照提示输入键入一串成绩(以一个负数作为循环结束的标志),但终端界面只是闪烁了一下就没了。


分析:

我们不想让输出界面一闪而过的原因是我们想看到程序运行的结果。这时,在cmd/powershell下键入对应程序的地址,运行后可达到结果。当然,我们既然选择了vscode,必然就图他写代码运行代码方便快捷,如果运行和调试还要专门跑去command执行就太麻烦了,所以如何在vscode里彻底解决才是我们思考的问题。

解决方案:

方案1 添加launch.json文件的配置

具体操作见下方的链接。
修改launch.json文件的具体操作

提示:
使用这种方案后,程序可能会无法进行调试。请在跳转链接后仔细读文章并慎重修改。


方案2 在程序中添加system(“pause”)命令

添加system("pause")要包含头文件stdlib.h。所以修改后的代码段如下:

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    int grade, max;
    grade = 0;
    max = 0;
    while (grade >= 0)
    { // 因为成绩不可能为负,故设定一个伪数据作为循环结束的标志
        printf("enter grade:");
        scanf("%d", &grade);
        if (grade > max)
        {
            max = grade;
        }
    }
    printf("最高分为:%d\n", max);
    system("pause");
    return 0;
}

提示:
有些程序只需添加#include <stdlib.h>头文件并在程序结尾加上system("pause")便能正常运行与调试;但有些程序还需在前者的基础上再做一步:在return 0处设置断点。

所做修改如下:
所做修改
程序运行结果如下:
运行结果图


方案3

在程序末尾的return跳转语句前加getchar()语句。

说明:
当程序无输入时,加一个getchar()即可;而如果程序中有一个或多个输入时(例如使用一个或多个scanf()函数),那么就要添加两个
原理:getchar()函数读取下一个输入字符,因此程序会等待用户输入。在程序没有输入的情况下,一个getchar()就会让程序的输出停留并将用户的输入作为程序结束标志(无论是输入什么);而在程序本身就有输入时,在提示输入下正常输入并按下enter键后,scanf()函数会读取键入的正常输入的数字或者字符,而第一个getchar()则读取换行符,第二个getchar()让程序暂停,等待用户输入以结束程序的运行。

用以下代码示例。

int main(void)
{
    printf("What's your age?\n");
    int age;
    scanf("%d", &age);
    printf("OK, now i know our age is %d\n", age);
    return 0;
}

此时,我输入age后程序的输出在屏幕上一闪而过。同样,在加了一个getchar()后也不行。
以下是加了两个getchar()后的结果:
在这里插入图片描述


总结

第一种方法可能会导致后续程序debug环节出问题;第二种和第三种方案都可以有效解决问题。当然,每个人的vscode的C/C++编译环境配置不一定都相同,所以上述方案仅供参考。

参考资料:
http://t.csdn.cn/VaL34
http://t.csdn.cn/j8mDt
《C primer plus》by Stephen Prata

  • 9
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值