c++ - 不稳定的行为

标签 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

我得到的输出是:

a 32767

我理解“a”,但为什么整数值是 32767?我只是想测试看看如果我使用“z”而不是分配给 int1 的数值会发生什么。

我尝试输入:

ax

...我也得到了相同的结果。

现在如果我使用 short int1 而不是 int int1 并使用输入运行程序:

az

我得到输出:

a 0

附言

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

我使用的是 64 位机器。

最佳答案

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

关于c++ - 不稳定的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2451902/

相关文章:

c++ - 初始化没有复制构造函数的成员聚合类型

c++ - 用于在 Windows 中调试的符号表

c++ - std::stringstream 和 std::ios::binary

c++ - 如何知道 boost::asio::ip::tcp::iostream 上没有可用数据?

c++ - std::cin 跳过空格

python - 在pylint中有没有一种方法可以在本地禁用警告然后在不明确给出列表的情况下撤消之前的抑制?

c++ - std::string == 运算符不工作

c++ - 通过 boost append 到现有文件

c++ - 如何从管道传输到标准输入的文件获取输入

C++,cin,直到不再使用 while 循环在线输入