【问题标题】:cin erratic behaviourcin 不稳定的行为
【发布时间】:2011-01-27 22:58:28
【问题描述】:

我是 C++ 的新手。小代码示例如下:

int main(int argc, char* argv[]) {    

    char ch1;
    int int1;

    cin >> ch1;
    cin >> int1;

    cout << ch1 << '\n';
    cout << int1 << '\n';

    return 0;
}

当我运行程序并输入以下内容时:

阿兹

我得到输出:

一个 32767

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

我尝试输入:

斧头

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

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

阿兹

我得到了输出:

一个 0

附言

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

我使用的是 64 位机器。

【问题讨论】:

    标签: c++ iostream cin initialization


    【解决方案1】:

    当输入流无法读取有效数据时,它不会更改您传递给它的值。 'z' 不是有效数字,因此 int1 保持不变。 int1 没有初始化,所以它的值恰好是 32767。在读取数据后检查 cin.fail() 或 cin.good() 的值,以确保一切正常。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        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
        

        【讨论】:

          【解决方案4】:

          直接使用 cin 就个人而言,即对我来说,在非平凡的程序中读取数据是个坏主意。我建议您阅读我为类似问题提供的另一个答案:

          C++ character to int

          【讨论】:

            猜你喜欢
            • 2019-08-02
            • 1970-01-01
            • 2012-04-24
            • 2011-04-24
            • 2015-08-19
            • 2020-09-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多