C++ 为什么std::cin不';不提示用户输入?

C++ 为什么std::cin不';不提示用户输入?,c++,c++11,cin,C++,C++11,Cin,我试图更好地理解std::cin行为 让我们看看下面的代码: #include <iostream> int main()

我试图更好地理解
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.                                                                           
}
#包括
int main()
{                                                                                                                                  
字符c,cin{'8'};
std::cin>>c;//输入“.”
标准:cin.回拨(c);
双d{88};
std::cin>>d;//预计会失败。
如果(标准::cin)
std::cout尝试添加此

else                                                                                                                           
{   
    std::cin.clear(); // new                                                                                                                           
    std::cin >> cin;                                                  
    std::cout << "cin = " << cin << '\n';                                                                                      
}                                                                                                                              
else
{   
std::cin.clear();//新建
标准::cin>>cin;
std::cout尝试添加此

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

std::cout运行此程序时的输入是什么?我知道第一个字符输入是
,但之后是什么?换行符?@user4581301它只是用“8”初始化变量cin。我这样做只是为了跟踪变量的内容。因为
std::cin>>d;
失败,在您可以从
st读取之前失败d::cin
再次。如果没有
clrear
ing,读取
std::cin
会立即失败,无需等待。@john是的,我按Enter键。运行此程序时输入的是什么?我知道第一个字符输入是
,但后面是什么?换行?@user4581301它只需用“8”初始化变量cin“。我这样做只是为了跟踪变量的内容。因为
std::cin>>d;
失败,在您可以再次读取
std::cin
之前失败。如果没有
clrear
ing,从
std::cin
读取将立即失败,无需任何等待。@john yes,我按Enter键。