cin不稳定的行为

时间:2010-03-16 03:14:22

标签: c++ iostream cin initialization

我是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

P.S。

sizeof(int) = 4
sizeof(short) = 2

我使用的是64位计算机。

4 个答案:

答案 0 :(得分:4)

当输入流无法读取有效数据时,它不会更改您传递的值。 'z'不是有效数字,因此int1保持不变。 int1没有被初始化,所以碰巧有32767的值。在读取数据后检查cin.fail()或cin.good()的值,以确保一切都按预期的方式工作。

答案 1 :(得分:1)

cin >> int1;表示“读取整数并将其放入int1”。所以你喂它z,它不是整数中的有效字符,它只是中止读取并留下int1中的任何内容。

通过将int1初始化为某事并查看会发生什么来对此进行测试。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

直接使用 cin ,就我而言,对于我来说,读取非平凡程序中的数据是一个坏主意。我建议你阅读我给出的另一个类似问题的答案:

C++ character to int

相关问题