为什么std :: cin不提示用户输入?

时间:2018-09-17 21:59:08

标签: c++ c++11 cin

我试图更好地理解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 >>会跳过空格(空格,换行符,制表符等)

1 个答案:

答案 0 :(得分:4)

尝试添加此内容

else                                                                                                                           
{   
    std::cin.clear(); // new                                                                                                                           
    std::cin >> cin;                                                  
    std::cout << "cin = " << cin << '\n';                                                                                      
}                                                                                                                              

由于先前的输入失败std::cin处于错误状态,因此所有操作都会失败,直到您清除错误状态为止。