#include <iostream>
using namespace std;
int main () {
int N;
cout << " Input an integer:";
cin >> N;
cout << " The integer entered is:" << N << endl;
}
当我输入一个Integer时,它会返回相同的值但是当我输入hello
时,它会给我1961729588
。
答案 0 :(得分:13)
字符串不是整数,std::cin
操作失败,输出的是最初在N
中的垃圾值。将N
初始化为0,并输入“hello”,您应该看到0作为输出。
答案 1 :(得分:5)
“当我输入一个Integer时,它会返回相同的值但是当我输入
hello
时,它会给我1961729588?
。”
当给出无法转换为整数的输入时,cin >> N;
实际上无法为流状态返回false
。您可以使用
if(!(cin >> N)) {
cerr << "Input a valid number!" << endl;
}
else {
cout << " The integer entered is:" << N << endl;
}
N
的值将被初始化(重置)为int()
(默认值),实际呈现为0
。
#include <iostream>
using namespace std;
int main () {
int N;
cout << " Input an integer:";
if(!(cin >> N)) {
cout << "Input a valid number!" << endl;
cout << "N = " << N << endl;
}
else {
cout << " The integer entered is:" << N << endl;
}
return 0;
}
输入
Hello
输出
Input an integer:Input a valid number!
N = 0
进行交叉检查
我无法重现获取某些垃圾值,如1961729588
。 std::istream& operator>>(std::istream&, int&);
输入运算符正确地重置了该值。
这是您当前编译器的实现,c ++标准级别(-std=c++11
)设置的问题吗?
我在cppreference.com找到了关于c ++标准的最终差异的一些注释:
虽然我没有发现他们真正引用的是'上面描述的值',但说实话。
答案 2 :(得分:3)
输入非整数时,输入失败。当输入失败时,N
保留其未定义的原始值,即写入未定义的行为。你应该测试你的输入,例如:
if (std::cin >> N) {
// do something with the successful input
}
else {
// deal with the input failure
}
答案 3 :(得分:1)
当您输入cin >> N;
时,编译器会将N
声明为int
。因此,您的程序将调用一个函数,该函数将尝试从int
读取代表cin
的文本,并将结果存储在N
中。
为此,它会尽可能多地读取cin中的数字字符,并在遇到非数字字符时停止。
例如,如果您输入32\n
,您的程序会显示3
,然后是2
,然后是\n
。当它看到\n
它停止阅读时,因为\n
不是数字。该程序将\n
重新推送到流(如果我们想稍后阅读)并将{32}存储在N
中。
假设您输入了"hello"
之类的单词,而不是数字。您的程序将显示h
然后停止,因为h
不是数字。 h
将被推回到流上(稍后将阅读),并且N
中不会存储任何内容。 cin
将返回错误,因为没有读取数字字符。
这仍然不能解释1961729588的价值。
注意N
从未初始化。根据C ++标准,未初始化的自动变量的值是未定义的。因此N
的值将是一些垃圾值。在你的情况下,这是1961729588。