{
int n;
cin>>n;
cout<< n;
}
輸出是0
當any alphabet or special character
被給定爲輸入。混亂在CIN的功能與INT dataype
在C不是這種情況,當我用scanf();
和printf()
。它打印相應的ASCII值。
請解釋爲什麼會發生這種情況?
{
int n;
cin>>n;
cout<< n;
}
輸出是0
當any alphabet or special character
被給定爲輸入。混亂在CIN的功能與INT dataype
在C不是這種情況,當我用scanf();
和printf()
。它打印相應的ASCII值。
請解釋爲什麼會發生這種情況?
在C和C++中,輸入整數時,驅動程序輸入函數將讀取數字字符,直到讀取不是數字的字符。例如,"123GHI"
的序列應該返回值123
。
只是問,'return'是在這裏使用的正確術語嗎? –
我相信是這樣,因爲輸入過程是函數,通常函數會返回一個值。 「 –
」*應該**輸出**值123 *「會更準確。輸出值並不總是在函數返回值中,這在'operator >>'中是肯定的,因爲解析值是通過引用參數而不是返回值輸出的。 –
請解釋爲什麼會發生這種情況?
在std::istream& operator>>(std::istream&, int)
的documentation它說(重點煤礦):
如果提取失敗(例如,如果輸入一個字母,其中數字預計),值保持爲未修改並設置失敗位。
用於C++ 11碼似乎初始化保證:
以爲你運行你的代碼的調試版本如果提取失敗,零被寫入值和failbit被設置。如果提取的結果值太大或太小而不適合值,則寫入
std::numeric_limits<T>::max()
或std::numeric_limits<T>::min()
,並設置失敗位標誌。
,n
可能與0
自動初始化,但在技術上訪問它是未定義的行爲,因爲它不是在你描述的情況下initalized。
你必須檢查的cin
狀態後,輸入檢測,如果數字提取過程中的故障發生,或者如果你可以安全地使用現在初始化值:
int n;
std::cin >> n;
if(std::cin) {
std::cout << n << std::endl;
}
else {
std::cin.clear(); // Clear the streams fail state
std::string dummy;
std::cin >> dummy; // Consume the non numeric input
std::cout << "Wrong input, '" << dummy << "' is not a number."
}
@Quentin THX,我一直在那裏煩惱那個公式。 –
請注意C++ 11及更高版本中的行爲稍有不同:「*如果提取失敗,則將**寫入值**並設置失敗位*。」 –
@remy已採用。 –
你檢查了的文檔'>>'的int重載?注意,C!= C++。 – Carcigenicate
您可以在輸入值後檢查cin的狀態。 –
@πάνταῥεῖcout << cin.fail();給1;只有當它的數量爲0時。爲什麼它失敗? – MELWIN