解决Visual Studio Code程序运行后外部终端界面闪退的问题 |
您所在的位置:网站首页 › myfakeapp训练时闪退 › 解决Visual Studio Code程序运行后外部终端界面闪退的问题 |
场景: 背景:在vscode下运行C语言程序时,总会出现外部输出终端界面闪退的情况,在查看了许多资料后,终于解决了问题,写下这篇文章记录一下自己解决问题的过程。 问题描述代码运行后外部输出界面闪退: // 输入一批学生的成绩,找出最高分 #include 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 #include 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 头文件并在程序结尾加上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 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |