[英]cin erratic behaviour
我是C ++的新手。 小代碼示例如下:
int main(int argc, char* argv[]) {
char ch1;
int int1;
cin >> ch1;
cin >> int1;
cout << ch1 << '\n';
cout << int1 << '\n';
return 0;
}
當我運行程序並輸入以下內容時:
AZ
我得到輸出:
一個32767
我理解'a'但為什么整數值為32767? 我只是想測試並看看如果不是分配給int1的數值而使用'z'會發生什么。
我嘗試輸入:
斧頭
......我也得到了相同的結果。
現在,如果不使用int int1
我使用short int1
並使用輸入運行程序:
AZ
我得到輸出:
一個0
PS
sizeof(int) = 4
sizeof(short) = 2
我使用的是64位機器。
當輸入流無法讀取有效數據時,它不會更改您傳遞的值。 'z'不是有效數字,因此int1保持不變。 int1沒有被初始化,所以碰巧有32767的值。在讀取數據后檢查cin.fail()或cin.good()的值,以確保一切按預期的方式工作。
cin >> int1;
表示“讀取整數並將其放入int1”。 所以你給它提供z
,它不是一個整數中的有效字符,它只是中止讀取並留下int1
任何內容。
通過將int1
初始化為某些內容並查看發生的情況來測試它。
c ++ cin
流正在為程序進行輸入驗證。
從cin
到int
cin
流式傳輸只接受有效數字的數字,-0123456789,並且只接受INT_MIN和INT_MAX之間的值。
如果需要z
(122)的數值,我建議使用c getchar
函數而不是cin
流。
int main(int argc, char* argv[]) {
cout << "function main() .." << '\n';
char ch1 = getchar();
int int1 = getchar();
cout << ch1 << '\n';
cout << int1 << '\n';
return 0;
}
當輸入az時,將輸出
a
122
對我來說,直接使用cin對於讀取非平凡程序中的數據是個壞主意。 我建議你閱讀我給出的另一個類似問題的答案:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.