#include<iostream>;
int main()
{
int a = 1;
int b = 2;
std::cin >> a >> b;
std::cout << a << "+" << b << "=" << a+b << std::endl;
return 0;
}
当我输入3 4
作为输入时,输出将是3+4=7
,好吧,这很奇怪;
但是当我输入a b
时,输出为0+0=0
(为什么它为0和0?);
最令人困惑的是a 4
,它将是0+0=0
(为什么不'0 + 4 = 4'?????);
然后我写了另一个编程。
#include<iostream>;
int main()
{
int a = 1;
int b = 2;
std::cin >> a;
std::cin.clear();
std::cin >> b;
std::cout << a << "+" << b << "=" << a+b << std::endl;
return 0;
}
当我输入a 4
时,为什么它仍为0+0=0
?不应该是0+4=4
?
感谢所有热心人士!!
我写了prog3,以测试当我不写int a=1;int b=2
;
2
#include <iostream>
using namespace std;
int main()
{
int a,b;
cin >> a ;
cin >> b;
cout<< a << "+"<< b <<"="<< a+b << endl;
return 0;
}
再次a b
时,会输出0+-1218170892=-1218170892
(为什么不是0+0=0
??)
答案 0 :(得分:1)
与所有istreams
一样,std::cin
有错误位。发生错误时设置这些位。例如,您可以使用good()
,bad()
,eof()
等函数找到错误位的值。如果读取错误输入(fail()
则返回{{1 }}),使用true
清除标志。您还可能需要clear()
来删除有问题的角色。
有关详细信息,请参阅ignore(1);
部分。 http://en.cppreference.com/w/cpp/io/basic_ios
答案 1 :(得分:0)
std :: cin是一个istream实例,因此在读取无效内容时会保持其错误状态。
为了“治愈”它,你必须清除它的旗帜
std::cin.clear();
并刷新其缓冲区。
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
更令人惊讶的是,当您输入无效字符时,它不会返回1 + 2 = 3,因为我预计失败的cin流对其尝试更新的内容没有任何副作用。
答案 2 :(得分:0)
根据C ++ 11,该值在错误上设置为零:如果提取失败,则将零写入值并设置failbit。
在'a 4'示例中,两个值均为0,因为缓冲区未被刷新/清除,因此第二个cin读取仍在读取错误,并且还接收值0.