淘先锋技术网

首页 1 2 3 4 5 6 7
int n ;
cin >> n;

总所周知,这段代码为输入一个整数,假设我输入了字符'q'那么结果又会如何呢?这种类型不匹配的情况将发生4种情况(同时发生):

  • n的值保持不变;
  • 不匹配的输入将被留住输入队列中
  • cin对象中的错误标志点将被置位
  • 对cin的调用将返回false(这为cin放在判断语句中设立了条件)

cin返回False意味着可以使用非数字输入来结束数字输入循环。非数字输入将导致cin置位错误标志点意味着必须重置错误标志位才能继续读取输入。接下来看一段程序例子,对上面四个点具有很好的阐述。这段程序的目的是输入5个高尔夫球得分,当我输入了字符的时候,程序会提示使用者输入数字,并重置相应的错误位,接受输入队列的所存的字符。之后进行新的输入,直至满足5次输入为止。

    using namespace std;// 程序清单6.14int total = 0;int golf[Max];cout << "请输入五轮高尔夫球的得分:\n";for (int i = 0; i < Max; i++){cout << "第" << i + 1 << "局的得分:\n";// cin 需要放在判断条件里边,若输入不成功则跳转到while循环中while (!(cin >> golf[i])){cout << "请输入数字!\n";// 清除错误信号cin.clear(); // 若输入不是回车,则一直进行cin.get的循环while (cin.get() != '\n');// 出了回车循环之后在进行重新输入cout << "请重新输入第" << i + 1 << "局的得分:\n";}}for (int j = 0; j < Max; j++){// 总和total += golf[j];}cout << "平均重量为:" << total / Max << endl;