检查 cin.fail() 中字符串变量时出错C++

Error checking cin.fail() for a string variable in C++

本文关键字:变量 出错 C++ 字符串 cin fail 检查      更新时间:2023-10-16
#include <iostream>
using namespace std;
int main()
{
  int i;
  cout << "Enter: " << endl;
  cin >> i;
  cout << cin.fail() << endl;
}

这是我进行错误检查的典型实现,以确保我输入有效的输入,这就是我所教的。我上面的代码的问题是,如果我输入"4d",它将 4 存储在变量"i"中,但将"d"留在缓冲区中,因此 cin.fail() 测试返回 false,但我希望它返回 true。如果我输入"c"或"ccc"等...cin.fail() 随心所欲地返回 true。

是否有任何适当的命令来测试我所描述的内容?

我怀疑有不止一种方法可以解决您的问题。我可以想到以下两个。

  1. 阅读i后立即获取下一个字符。如果该字符不是空格字符,则可以将其标记为错误。

    cin >> i;
    if ( cin ) // reading to i was successful.
    {
       int c = cin.get();
       if (!isspace(c) )
       {
          // There was a non whitespace character right
          // after the number.
          // Treat it as a problem
       }
    }
    
  2. 读取字符标记并检查其中是否有任何字符不是数字。

    std::string token;
    cin >> token;
    for ( auto c : token )
    {
       if (!isdigit(c) )
       {
          // Problem
       }
    }