C/C++ 控制檯視窗暫停
為什麼我看不到控制檯的輸出結果?
在編寫C++程式中,經常會出現,控制檯視窗一閃就消失了的情況
為什麼會這樣?
原因簡單到有點可笑:因為程式執行結束了
對於控制檯程式,作業系統讓它開始執行前會為它造一個控制檯視窗,在它結束的時候為它銷燬這個這視窗
所以,當程式的最後一條語句執行完後,沒什麼可做了,程式執行結束,視窗就沒了
但是我們時常並不需要讓它一閃而過,而需要知道它的輸出結果,那麼以下方法供你參考
system("pause");
在編寫的c++程式中,如果是視窗,有時會一閃就消失了,如果不想讓其消失,在程式結尾處新增:
system("pause");
注意:不要再return 的語句之後加,那樣就執行不到了。
分析:
system()
是呼叫系統命令
pause
暫停命令;
這樣在執行到此處時,會顯示“Press any key to continue . . .”也就是** “按任意鍵繼續...”**
不過一般的時候不建議用這條命令
可以改用std::cin.get或getchar()
為何不要用system("pause")?
有兩個理由
一 : 不具可移植性
二 : 這東西很貴
貴在那裡?讓我們來看看system("pause")的流程
1 : 暫停你的程式
2 : 在sub-process中啟動OS
3 : 尋找要執行的命令併為之分配記憶體
4 : 等待輸入
5 : 回收記憶體
6 : 結束OS
7 : 繼續你的程式
這將在很大程度上增加編譯和執行的時間
getch():
所在標頭檔案:conio.h
函式用途:從控制檯讀取一個字元,但不顯示在螢幕上
例如:
char ch;
或int ch;
getch();
或ch=getch();
用getch();
會等待你按下任意鍵,再繼續執行下面的語句;
用ch=getch();
會等待你按下任意鍵之後,把該鍵字元所對應的ASCII碼賦給ch,再執行下面的語句。
getchar():
從io流中提取字元!
該函式宣告在stdio.h標頭檔案中,使用的時候要包含stdio.h標頭檔案。如:
#include<stdio.h>
int getchar(void);
getch與getchar基本功能相同,差別是getch直接從鍵盤獲取鍵值,不等待使用者按回車,只要使用者按一個鍵,
getch就立刻返回, getch返回值是使用者輸入的ASCII碼,出錯返回-1.輸入的字元不會回顯在螢幕上.
getch函式常用於程式除錯中,在除錯時,在關鍵位置顯示有關的結果以待檢視,然後用
getch
函式暫停程式執行,當按任意鍵後程序繼續執行.
用法區別:
1.getchar()
,能接受一個字元,按回車結束,並且在螢幕上顯示出來,而且可以向前清除剛才所寫的
2.getch()
,接收一個字元,在螢幕上不顯示
你自己多寫寫,練練應該可以理解的
getchar()從輸入裝置得到一個字元,這個字元顯示在螢幕上,getch從輸入裝置得到一個字元,
但是這個字元不顯示在螢幕上,例如:
#include <stdio.h>
int main()
{
printf("%c",getchar());
}
假設這兒從鍵盤得到一個字元f按回車你就會看到這樣的結果
f
f
第一個f
是你輸入的f,第二個是printf
得到的f
#include <stdio.h>
int main()
{
printf("%c",getchar());
}
假設輸入一個f
得到的結果是
f
這個f
就是printf
輸出的f
getchar
是優化過的,
getchar
輸入字元,一直到按下回車才結束,然後執行程式碼
getch
不用按回車鍵
system("pause")
可以實現凍結螢幕,便於觀察程式的執行結果;
getch
不僅可以暫停程式
還可以獲取一個字元
system("pause")
只是單純的暫停
區別在於作用機理,雖然效果看起來似乎一樣。
system
返回值是你呼叫Shell
下命令後的返回結果,getch()
函式會有函式提供的返回結果。
通常情況下,Shell
命令的返回值可能會有意外性的不確定
有時無法通過返回值判斷命令是否成功執行,對於根據返回值進行後續處理的程式,會有影響。
而函式的返回值則可以確定執行是否成功。但是你根本就不判斷返回值,也沒有處理,所以可以不必考慮這些區別。