【问题标题】:Why cin.clear() is not reseting the failbit state?为什么 cin.clear() 没有重置故障位状态?
【发布时间】:2020-09-29 06:36:50
【问题描述】:
#include <iostream>
using namespace std;

int main(){
  int const size = 10;
  char input_1[size];
  char input_2[size];
  cout << "Enter input 1: " << endl;
  cin.get(input_1, size);
  cin.get();
  cin.clear();
  cout << "Enter input 2: " << endl;
  cin.get(input_2,size);
  cout << "input_2 = " << input_2 << endl;
  return 0;
}

输出 1 ~/cplusplus $ ./conundrum.o

输入输入1:

我们

输入输入2:

asd

input_2 = asd

输出 2

~/cplusplus $./conundrum.o

输入输入1:

输入输入2:

输入_2 =

~/cplusplus $


当我输入连续的字符流时,该程序按预期输出。 OUTPUT 1 显示预期输出。但是当我只在第一个输入时按 Enter 时,此代码不会要求输入 input_2 并抛出一个空的 input_2,如 OUTPUT 2 所示。根据我的理解,换行符应该已被 cin.get() 和故障位设置消灭到某些异常状态(在 input_1 中没有存储任何内容之后)应由 cin.clear() 重置,以便为第二个 cin.get(input_2,...) 做好准备。问题出在哪里?

【问题讨论】:

    标签: c++ cin


    【解决方案1】:

    你应该做这个改变

    cin.get(input_1, size);
    cin.clear();
    cin.get();
    

    在您的代码中,cin.get() 失败,因为失败位已设置。

    【讨论】:

    • 谢谢。现在我知道问题出在哪里了。
    猜你喜欢
    • 2019-10-28
    • 2020-06-05
    • 2012-01-28
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    相关资源
    最近更新 更多