我试图更好地理解std::cin
的行为。
我们来看下面的代码:
#include <iostream>
int main()
{
char c, cin {'8'};
std::cin >> c; // enter '.'
std::cin.putback(c);
double d {88};
std::cin >> d; // expected to fail.
if (std::cin)
std::cout << "double d = " << d << '\n';
else
{
std::cin >> cin; // doesn't prompt user for entry neither put c into cin.
std::cout << "cin = " << cin << '\n';
}
std::cout << "d = " << d << '\n'; // just to check.
}
我想知道什么解释std::cin >> cin;
没有提示用户输入的事实既没有将之前放回c
流的std::cin
的值归因于变量cin
。
注意:
std:: cin >>
会跳过空格(空格,换行符,制表符等)尝试添加此功能
else
{
std::cin.clear(); // new
std::cin >> cin;
std::cout << "cin = " << cin << '\n';
}
因为先前输入失败,std::cin
处于错误状态,并且在清除错误状态之前所有操作都将失败。