阻止用户输入字母? C ++

时间:2014-03-09 12:51:42

标签: c++

嗨,我对C ++很新,但我有一点问题,就是我必须阻止用户在数字部分输入字母。我做了一个有效的尝试,但它的狡猾,因为它将允许用户继续,然后将告诉他们他们有错误,并重新启动应用程序。如何验证它以显示错误消息,告诉他们这不是数字并让他们重新输入数字?

以下是代码:

 double  Rheight;

do 
{
    cout << "Enter height of the room. " << endl;
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 4);
    cout << "WARNING: If you enter a letter the program will exit." << endl; 
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
    cin >> Rheight;
}
while (Rheight > 20 || Rheight == 0);

询问您是否需要查看更多代码。

2 个答案:

答案 0 :(得分:2)

答案基本上有两个组成部分:

  1. 检测输入失败。
  2. 输入失败后清理。
  3. 第一部分相当简单:在使用输入之前,输入流处于良好状态后,总是测试。例如:

    if (std::cin >> value) {
        // use value
    }
    else {
        // deal with the input error
    }
    

    如何处理输入错误取决于您的需求。读取文件时,您可能会中止读取整个文件。从标准输入读取时,您可以忽略下一个字符,整行等。大多数情况下,您希望忽略整行。在此之前,您需要将流恢复到良好的状态:

    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    

    第一行清除了流的错误标志,第二行是一个魔术咒语,忽略了必要的字符,直到新行被忽略。

答案 1 :(得分:0)

要检查输入是否有效,您可以使用

 if(!(cin >> Rheight))
 {
     cout << "Please input a valid number!" << endl;
     continue;
 }