cin 在出现错误时会做什么
What does cin do when there is an error
#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
??
像所有的istreams
一样,std::cin
也有错误位。这些位是在发生错误时设置的。例如,您可以使用 good()
、bad()
、eof()
等函数找到错误位的值。如果读取错误的输入(fail()
返回true
(,请使用clear()
清除标志。您可能还需要一个ignore(1);
来删除违规字符。
有关详细信息,请参阅State functions
部分。 http://en.cppreference.com/w/cpp/io/basic_ios
根据 C++11 在出现错误时将值设置为零:如果提取失败,则向值写入零并设置故障位。
在"a 4"示例中,两个值均为 0,因为缓冲区尚未刷新/清除,因此第二个 cin 读取仍在读取错误,并且还收到值 0。
std::cin 是一个 istream 实例,因此它在读取无效内容时会保持其错误状态。
为了"治愈"它,您必须清除其标志
std::cin.clear();
并冲洗其缓冲区。
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
更令人惊讶的是,当您输入无效字符时,它不会返回 1 + 2 = 3,因为我希望失败的 cin 流对它尝试更新的内容没有副作用。
相关文章:
- 警告处理为错误这里有什么问题
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 0-1背包代码中的错误.我的代码中有什么错误
- 是什么导致了Unity 3D中的"错误线程异常"?
- 如果我这样写,我的单例类会导致什么错误
- 为什么输出不同以及此代码中有什么错误
- 我的代码中有什么错误.我尝试在类中使用数组,但出现逻辑错误
- 使用 fopen 而不是 Visual Studio 建议的 fopen_s 有什么错误
- 我的 C++11 测试表明 sort(vector<string>) 甚至比 C++03 慢,有什么错误吗?
- 这个 c++ 结构有什么错误
- 什么错误的逻辑导致我的链表的这个 push_back(..) 函数失败?
- 我的类定义中有什么错误?
- realloc C 函数的可能包装函数有什么错误?
- 什么错误无法理解
- C++:使用STL矢量时有什么错误
- 下面的代码中有什么错误,应该如何更正
- 我错过了什么?c++错误
- 这里面有什么错误?字符串赋值
- 如果将此函数放在泛型库中,会导致什么错误?
- 我做错了什么? c++错误