1. 程式人生 > >C/C++ 控制檯視窗暫停

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命令的返回值可能會有意外性的不確定
有時無法通過返回值判斷命令是否成功執行,對於根據返回值進行後續處理的程式,會有影響。
而函式的返回值則可以確定執行是否成功。但是你根本就不判斷返回值,也沒有處理,所以可以不必考慮這些區別。