4

我是 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的数值,会发生什么。

我尝试输入:

斧头

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

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

阿兹

我得到输出:

一个 0

附言

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

我使用的是 64 位机器。

4

4 回答 4

4

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

于 2010-03-16T03:23:24.517 回答
1

cin >> int1;意思是“读取一个整数并将其放入 int1。” 因此,您输入它z,它不是整数中的有效字符,它只是中止读取并将任何内容留在int1.

通过初始化int1某些东西并查看会发生什么来测试它。

于 2010-03-16T03:18:26.303 回答
0

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

C++ 字符转 int

于 2010-03-16T09:05:18.147 回答
0

c++cin流正在为程序进行输入验证。

从流式传输cin到 an时,int cin将仅接受有效数字 digits,-0123456789,并且仅接受 INT_MIN 和 INT_MAX 之间的值。

如果需要 (122) 的数值,z我建议使用 cgetchar函数而不是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
于 2010-03-16T03:40:14.090 回答