場(chǎng)景:
背景:在vscode下運(yùn)行C語(yǔ)言程序時(shí),總會(huì)出現(xiàn)外部輸出終端界面閃退的情況,在查看了許多資料后,終于解決了問(wèn)題,寫下這篇文章記錄一下自己解決問(wèn)題的過(guò)程。
問(wèn)題描述
代碼運(yùn)行后外部輸出界面閃退:
// 輸入一批學(xué)生的成績(jī),找出最高分
#include <stdio.h>
int main(void)
{
int grade, max;
grade = 0;
max = 0;
while (grade >= 0)
{ // 因?yàn)槌煽?jī)不可能為負(fù),故設(shè)定一個(gè)偽數(shù)據(jù)作為循環(huán)結(jié)束的標(biāo)志
printf("enter grade:");
scanf("%d", &grade);
if (grade > max)
{
max = grade;
}
}
printf("最高分為:%d\n", max);
}
在運(yùn)行上述代碼段后,按照提示輸入鍵入一串成績(jī)(以一個(gè)負(fù)數(shù)作為循環(huán)結(jié)束的標(biāo)志),但終端界面只是閃爍了一下就沒(méi)了。
分析:
我們不想讓輸出界面一閃而過(guò)的原因是我們想看到程序運(yùn)行的結(jié)果。這時(shí),在cmd/powershell下鍵入對(duì)應(yīng)程序的地址,運(yùn)行后可達(dá)到結(jié)果。當(dāng)然,我們既然選擇了vscode,必然就圖他寫代碼運(yùn)行代碼方便快捷,如果運(yùn)行和調(diào)試還要專門跑去command執(zhí)行就太麻煩了,所以如何在vscode里徹底解決才是我們思考的問(wèn)題。
解決方案:
方案1 添加launch.json文件的配置
具體操作見(jiàn)下方的鏈接。
修改launch.json文件的具體操作
提示:
使用這種方案后,程序可能會(huì)無(wú)法進(jìn)行調(diào)試。請(qǐng)?jiān)谔D(zhuǎn)鏈接后仔細(xì)讀文章并慎重修改。
方案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)
{ // 因?yàn)槌煽?jī)不可能為負(fù),故設(shè)定一個(gè)偽數(shù)據(jù)作為循環(huán)結(jié)束的標(biāo)志
printf("enter grade:");
scanf("%d", &grade);
if (grade > max)
{
max = grade;
}
}
printf("最高分為:%d\n", max);
system("pause");
return 0;
}
提示:
有些程序只需添加#include <stdlib.h>
頭文件并在程序結(jié)尾加上system("pause")
便能正常運(yùn)行與調(diào)試;但有些程序還需在前者的基礎(chǔ)上再做一步:在return 0
處設(shè)置斷點(diǎn)。
所做修改如下:
程序運(yùn)行結(jié)果如下:
方案3
在程序末尾的return跳轉(zhuǎn)語(yǔ)句前加getchar()
語(yǔ)句。
說(shuō)明:
當(dāng)程序無(wú)輸入時(shí),加一個(gè)getchar()
即可;而如果程序中有一個(gè)或多個(gè)輸入時(shí)(例如使用一個(gè)或多個(gè)scanf()
函數(shù)),那么就要添加兩個(gè)。
原理:getchar()
函數(shù)讀取下一個(gè)輸入字符,因此程序會(huì)等待用戶輸入。在程序沒(méi)有輸入的情況下,一個(gè)getchar()
就會(huì)讓程序的輸出停留并將用戶的輸入作為程序結(jié)束標(biāo)志(無(wú)論是輸入什么);而在程序本身就有輸入時(shí),在提示輸入下正常輸入并按下enter鍵后,scanf()
函數(shù)會(huì)讀取鍵入的正常輸入的數(shù)字或者字符,而第一個(gè)getchar()
則讀取換行符,第二個(gè)getchar()
讓程序暫停,等待用戶輸入以結(jié)束程序的運(yùn)行。
用以下代碼示例。
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;
}
此時(shí),我輸入age后程序的輸出在屏幕上一閃而過(guò)。同樣,在加了一個(gè)getchar()
后也不行。
以下是加了兩個(gè)getchar()
后的結(jié)果:
總結(jié)
第一種方法可能會(huì)導(dǎo)致后續(xù)程序debug環(huán)節(jié)出問(wèn)題;第二種和第三種方案都可以有效解決問(wèn)題。當(dāng)然,每個(gè)人的vscode的C/C++編譯環(huán)境配置不一定都相同,所以上述方案僅供參考。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-591794.html
參考資料:
http://t.csdn.cn/VaL34
http://t.csdn.cn/j8mDt
《C primer plus》by Stephen Prata文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-591794.html
到了這里,關(guān)于解決Visual Studio Code程序運(yùn)行后外部終端界面閃退的問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!