C++ cin>>位于测试条件中时

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( )来读取行尾之前的所有输入,从而删除这一行

中的错误输入。另一种方法是读取到下一个空白字符,这样将每次删除一个

单词,而不是一次删除整行。最后,程序告诉用户,应输入一个数字。

 

 

 


版权声明:本文为m0_37965811原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。