“请看下面的代码:”
int n;
cin >> n;
“如果用户输入一个单词,而不是一个数字,情况将如何呢?发生这种类型不匹配的情况时,将发生4种情况:”
- n的值保持不变。
- 不匹配的输入将被留在输入队列中。
- cin对象中的一个错误标记被设置。
- 对cin方法的调用将返回false(如果被转换为bool类型)。
“方法返回false意味着可以用非数字输入来结束读取数字的循环。非数字输入设置错误标记意味着必须重置该标记,程序才能继续读取输入。clear()方法重置错误输入标记,同时也重置文件尾。”
程序清单6.14 cingolf.cpp
#include <iostream>
const int Max = 5;
int main()
{
using namespace std;
int golf[Max];
cout << "Please enter your golf scores.\n";
cout << "You must enter " << Max << " rounds.\n";
int i;
for (i = 0; i < Max; ++i)
{
cout << "round #" << i+1 <<":";
while (!(cin >> golf[i]))
{
cin.clear(); // 重置cin以接受新的输入。
while (cin.get() != '\n') // 删除错误输入。
continue;
cout << "Please enter a number:"; // 提示用户再输入。
}
}
// 计算平均值。
double total = 0.0;
for (i = 0; i < Max; ++i)
total += golf[i];
// 输出结果。
cout << total / Max << " = average score " << Max << " rounds\n";
return 0;
}
“程序发现用户输入了错误内容时,应采取3个步骤:”
- 重置cin以接受新的输入。
- 删除错误输入。
- 提示用户再输入。