為什么我看不到控制台的輸出結果?
在編寫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命令的返回值可能會有意外性的不確定
有時無法通過返回值判斷命令是否成功執行,對於根據返回值進行后續處理的程序,會有影響。
而函數的返回值則可以確定執行是否成功。但是你根本就不判斷返回值,也沒有處理,所以可以不必考慮這些區別。
