來自 python 的 C 新手。當我編譯并運行以下代碼時,然后在輸入任何內容之前按 Ctrl C,我看到終端仍然列印You entered 0^C.
#include <iostream>
int main()
{
int num1;
std::cin >> num1;
std::cout << "You entered " << num1 << "\n";
}
首先,來自 Python,我沒有看到在沒有輸入時不拋出錯誤的好處,std::cin也不明白為什么允許程式繼續執行以下幾行的動機。不起作用時std::cin不拋出錯誤的原因是什么?
其次,這種行為是否表明num1初始化前的值為零?我最初的想法是,即使它沒有初始化,也可能會num1被賦予一個默認值0。然而,下面的代碼似乎打破了這個猜測:當我在編譯和運行下面的代碼后按 Ctrl C 時,螢屏會列印You entered 24^C,有時You entered 2^C,有時只是You entered ^C. 如果我重建專案,則會出現不同的數字。
#include <iostream>
int main()
{
int num1, num2, num3;
std::cin >> num1 >> num2 >> num3;
std::cout << "You entered " << num1 << ", " << num2 << ", " << num3 << "\n";
}
我認為這可能與緩沖區有關,但添加std::cin.ignore()并不能阻止這種行為。
這是 C 的事情還是與作業系統處理鍵盤中斷的方式有關?我覺得我之前可能^C在中斷 python 腳本的同時看到過數字,但沒有考慮過。
uj5u.com熱心網友回復:
num1 未初始化,這意味著它包含記憶體中的任何隨機值。
當按下 control-c 時,std::cin >> num1;失敗。然后下一行將列印一些之前的隨機值num1。
正確的版本應該是
int num1 = 0;
if (std::cin >> num1)
std::cout << "You entered " << num1 << "\n";
您可以使用std::cin.ignore和ctd::cin.clear清除行尾。例如,在這種情況下,用戶應該輸入整數,但改為輸入文本。
在下面的示例中,如果您在需要整數時輸入文本,cin則將繼續嘗試讀取該行,除非該行被清除。
for (int i = 0; i < 3; i )
{
std::cout << i << " - Enter integer:\n";
if (std::cin >> num1)
{
std::cout << "You entered " << num1 << "\n";
}
else
{
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372499.html
