簡體   English   中英

cin不穩定的行為

[英]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流正在為程序進行輸入驗證。

cinint 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對於讀取非平凡程序中的數據是個壞主意。 我建議你閱讀我給出的另一個類似問題的答案:

C ++字符為int

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM