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

您所在的位置:网站首页 myfakeapp训练时闪退 解决Visual Studio Code程序运行后外部终端界面闪退的问题

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

2023-10-12 05:57| 来源: 网络整理| 查看: 265

场景: 背景:在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