我试图更好地理解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 >>
会跳过空格(空格,换行符,制表符等)答案 0 :(得分:4)
尝试添加此内容
else
{
std::cin.clear(); // new
std::cin >> cin;
std::cout << "cin = " << cin << '\n';
}
由于先前的输入失败std::cin
处于错误状态,因此所有操作都会失败,直到您清除错误状态为止。