int n;
cin>>n;
如果用户输入一个单词,而不是一个数字,情况将如何呢?发生这种类
型不匹配的情况时,将发生4种情况:
● n的值保持不变;
● 不匹配的输入将被留在输入队列中;
● cin对象中的一个错误标记被设置;
● 对cin方法的调用将返回false(如果被转换为bool类型)。
黄字解释?
表达式cin>>fish [i]实际上是一个cin类的方法函数调用,该
函数返回一个cin对象。如果返回的cin位于测试条件中,则将被转换为bool类型。如果输入成功,则转换后的值为true,否则为false。如果表达式的值为false,则循环结
束。
绿字解释?
非数字输入设置错误标记意味着必须重置该标记,程序才能继续读取输入。clear( )
方法重置错误输入标记,同时也重置文件尾(EOF条件,参见第5章)。输入
错误和EOF都将导致cin返回false,第17章将讨论如何区分这两种情况。
代码实例:
for(i=0;i<Max;i++)
{
cout << "round #"<<i+l<<":";
while(!(cin>>golf[i]))
{
cin. clear();//reset input
while (cin. get()!=\ nl)
continue;//get rid of bad input
cout << "Please enter a number:";
}
}
运行情况:
please enter your golf scores.
You must enter 5 rounds.
round #1:88
round #2:87
round #3:must i?
Please enter a number:103
round #4:94
round #5:86
91.6=average score 5 rounds
代码解释:
如果用户输入88,则cin表达式将为true,因此将一个值放到数组中;而
表达式!(cin >> golf [i])为false,因此结束内部循环。然而,如果用户输入must
i?,则cin表达式将为false,因此不会将任何值放到数组中;而表达式!(cin >>
golf [i])将为true,因此进入内部的while循环。该循环的第一条语句使用clear(
)方法重置输入,如果省略这条语句,程序将拒绝继续读取输入。接下来,程
序在while循环中使用cin.get( )来读取行尾之前的所有输入,从而删除这一行
中的错误输入。另一种方法是读取到下一个空白字符,这样将每次删除一个
单词,而不是一次删除整行。最后,程序告诉用户,应输入一个数字。