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

Why std::cin doesn't prompt for user entry?

本文关键字:用户 输入 提示 std cin 为什么      更新时间:2023-10-16

我试图更好地理解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;不提示用户输入的事实,也没有将先前放回std::cin流中的c值归因于变量cin

注意:

  • 众所周知,std:: cin >>会跳过空格(空格、换行符、制表符等(

尝试添加这个

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

由于您之前的输入失败std::cin处于错误状态,并且在您清除错误状态之前,所有操作都将失败。