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

时间:2016-03-16 04:56:13

标签: c++ error-handling

#include <iostream>
using namespace std;

int main()
{
  int i;
  cout << "Enter: " << endl;
  cin >> i;

  cout << cin.fail() << endl;
}

这是我错误检查的典型实现,以确保我输入有效的输入,这就是我所教的内容。我上面代码的问题是如果我输入&#39; 4d&#39;它将4存储在变量&#39; i&#39;中,但保留了&#39; d&#39;在缓冲区中,所以cin.fail()测试返回false,但我希望它返回true。如果我输入&#39; c&#39;或者&ccc&#39; etc ... cin.fail()按我的意愿返回true。

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

1 个答案:

答案 0 :(得分:1)

我怀疑有多种方法可以解决您的问题。我可以想到以下两点。

  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
       }
    }