2010-11-14 106 views
2

我目前正在研究C++程序,我想检查用户输入是否有效。目前我的代码工作,如果用户输入正确的输入,或者如果用户输入一个不正确的小号码,我的程序会告诉用户输入无效。现在我的问题是,当用户输入多个字符/字母或一个有9个或更多数字的大数字时,我的程序进入一个无限循环,给它们提供错误信息。下面是我的代码:检查有效输入

//for (;;) 
    while (flag== false) 
    { 
     cin >> Input; 
     if (Input <= choice.size()-1) 
     { 
      flag = true; 
    // break; 
     } 

     else 
     { 
      cerr << "Input <" << Input << "> is Invalid, Please Choose a Valid Option\n"; 
      userInput = 0; 
     } 
    } 

正如你看到的,我也试图做的for循环的infinate,但它给了我同样的结果。 在我的代码中,我正在将一个矢量打印到屏幕上。基本上,用户选择矢量值来使用它。

我愿意接受任何建议。谢谢

+0

可能重复http://stackoverflow.com/questions/3273993/how-do-i-validate-user -in-a-double-in-c) – casablanca 2010-11-14 18:28:40

回答

2

如果用户键入的东西无法读入Input(从代码中不清楚Input是什么类型),那么该输入将停滞在输入流中,并且循环的每次迭代都将保持失败在输入之前阅读,直到您清除流。

您需要清除流标志并摆脱每次读取失败后在流中等待的错误输入。尝试是这样的:

while(!(cin >> Input) || Input <= choice.size()-1) 
{ 
    cerr << "Input <" << Input << "> is Invalid, Please Choose a Valid Option\n"; 
    cin.clear(); // Clears the input stream fail flag 
    cin.ignore(100, '\n'); // Ignores any characters left in the stream 
} 
的[?我怎么验证用户输入在C++双(
+0

'cin.sync()'是比指定一个硬编码值(比如100)更好的选择。 – casablanca 2010-11-14 19:01:17

+0

'sync'是否可移植? http://www.cplusplus.com/reference/iostream/istream/sync/不太清楚在'cin'上调用'sync'的保证是什么,以及http://stackoverflow.com/questions上的评论/ 3273993 /我怎么做 - 验证 - 用户输入作为一个双 - 在C是不是太鼓舞人心。 – user168715 2010-11-14 20:45:14