场景:
背景:在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++编译环境配置不一定都相同,所以上述方案仅供参考。文章来源:https://www.toymoban.com/news/detail-591794.html
参考资料:
http://t.csdn.cn/VaL34
http://t.csdn.cn/j8mDt
《C primer plus》by Stephen Prata文章来源地址https://www.toymoban.com/news/detail-591794.html
到了这里,关于解决Visual Studio Code程序运行后外部终端界面闪退的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!