c ++在没有tryCatch块的情况下捕获错误输入

时间:2015-11-16 18:50:42

标签: c++ arrays

我试图在没有tryCatch-Block的情况下捕获错误的输入。每当用户输入错误的值(例如'hh'或-5)时,我的程序将再次询问,直到用户键入正确的值。然后继续,直到阵列已满。

int main() {
  double array[6];
  string str_array[7];
  str_array[0] = "stringA";
  str_array[1] = "stringB";
  str_array[2] = "stringC";
  str_array[3] = "StringD";
  str_array[4] = "StringE";
  str_array[5] = "StringF";
  str_array[6] = "StringG";
  double value;

  for (int i = 0; i < 7; i++) {
    bool exit = false;
    while (!exit) {
        cout << str_array[i] << ":";
        if (cin >> value&& value> 0) {
            array[i] = value;
            cout << array[i] << endl;
            exit = true;
        } else {
            cerr << "incorrect input" << endl;
            cin.clear();
        }
    }
  }
}

1 个答案:

答案 0 :(得分:1)

cin.clear();

还不够。您还需要使用被拒绝的输入来同步新输入:

else {
        cerr << "incorrect input" << endl;
        cin.clear();
        std::string dummy; // <<<<<
        cin >> dummy; // <<<<<
    }

否则你只会一遍又一遍地阅读被拒绝的输入。

cin.ignore(numeric_limits<streamsize>::max(), '\n')之类的东西也可以为你服务。