這是我之前解決問題時,收集在印象筆記裏的內容,爲了之後整理方便,把它轉移至這裏。如下內容,均來自微軟官方網站相關。
問題:C++控制檯閃回
解決辦法:
1,在程序結尾添加system("pause");[如有return語句則寫在return以前]
解析:system(const char *command);
system函數返回給定的命令字符串command進行系統調用。若是命令執行正確一般返回零值。若是command爲NULL,system()將嘗試是否有可用的命令解釋器。若是有返回非零值,不然返回零值。
system是執行dos下面的一些命令,在DOS下能執行的指令,用system均可以執行。把dos的命令直接放到它的參數裏面就能夠執行,用戶隨意敲一個鍵後程序繼續運行。
pause 它會提示「請按任意鍵繼續……」,pause命令沒有任何的參數,它的命令就是它的自己,當pause命令運行後,會中斷執行語句。這個中斷不是當即中止,只是暫停,按下任意鍵以後就會繼續執行下面的語句。並且能夠重複用不少次,在一個批處理命令中,能夠嘗試使用多個pause命令。
2,在程序結尾添加get char();[如有return語句則寫在return以前]
解析:get char()函數從STDIN(標準輸入)獲取並返回下一個字符,若是到達文件尾返回EOF。這種方法是直接讓程序運行get char函數,讓程序在接受一個字符後再退出,至關於本身按下任意鍵後程序才退出。
編譯器警告(等級1)C4305
「context」:從"type1"到"type2"的截斷
備註:若是將值轉換爲較小類型的初始化或構造函數參數,則會發出此警告,致使信息丟失。
示例
此示例顯示了你可能會看到此警告的兩種方式:
// C4305.cpp
// Compile by using: cl /EHsc /W4 C4305.cpp
struct item
{
item(float) {}
};
int main()
{
float f = 2.71828; // C4305 'initializing'
item i(3.14159); // C4305 'argument'
return static_cast<int>(f);
}
若要解決此問題,請使用正確類型的值進行初始化,或使用顯式強制轉換爲正確的類型。 例如,使用浮點文本(如 2.71828 f),而不是雙精度(浮點文本的默認類型)來初始化浮點變量,或傳遞給採用float參數的構造函數。
編譯器警告(等級2) C4244
"argument":從 "type1" 轉換到 "type2",可能丟失數據
浮點類型已轉換爲整數類型。 可能發生了數據丟失。
若是收到 C4244,則應將程序更改成使用兼容類型,或向代碼添加一些邏輯,以確保可能值的範圍將始終與你使用的類型兼容。
C4244 也能夠在第3級和第4級激發;有關詳細信息,請參閱編譯器警告(等級3和4) C4244 。
示例
下面的示例生成 C4244:
C++
// C4244_level2.cpp
// compile with: /W2
int f(int x){ return 0; }
int main() {
double x = 10.1;
int i = 10;
return (f(x)); // C4244
// try the following line instead
// return (f(i));
}