如果用户输入无效,则循环

时间:2017-04-09 10:30:23

标签: c++ loops conditional-statements

我想创建一个程序,当用户输入我没有定义的内容时,程序会再次提示他。

我用if语句做了它,但它只循环了一次而且没有再做。我尝试了循环,但只要输入为假,它就会破坏条件并拒绝所有输入。在c ++中。

非常感谢任何帮助。

*/

4 个答案:

答案 0 :(得分:0)

而不是采用这种方法(检查条件仅一次):

if (x == "bow"){
        cout << "you bought the bow.\n you now have " <<coins - bow_cost << " 
  coins." << endl; cin >> x;
} else{
    xD();
}

实际上是方法的<{3}} invocation xD()

你应该做一个do-while循环,

示例:

while (x.compare("bow") != 0)
{ 
  cout << "sorry, wrong input, try again...";
  cin >> x;
}

请注意使用compare方法而不是==运算符

RECURSIVE在文档

中有更多相关内容

答案 1 :(得分:0)

您可以使用cin&gt;&gt;的返回值[您的输入对象]这里检查状态或istream的方法fail()。一旦输入流无法解析整个或部分流,它就会失败并保持故障状态,直到您清除它为止。保留未分析的输入(因此您可以尝试以不同方式对其进行解析?)m因此,如果您尝试&gt;&gt;再次对同类型的对象,你会得到同样的失败。要忽略输入的N个字符,有方法

istream::ignore(streamsize amount, int delim = EOF)

示例:

int  getInt()
{
    while (1) // Loop until user enters a valid input
    {
        std::cout << "Enter an int value: ";
        long long x;  // if we'll use char, cin would assume it is character
        // other integral types are fine
        std::cin >> x;

        // if (! (std::cin >> x))
        if (std::cin.fail()) // has a previous extraction failed?
        {
            // yep, so let's handle the failure, or next >> will try parse same input
            std::cout << "Invalid input from user.\n";
            std::cin.clear(); // put us back in 'normal' operation mode
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n'); // and remove the bad input
        }
        // Thechnically you may do only the above part, but then you can't distingusih invalid format from out of range
        else if(( x  > std::numeric_limits<int>::max()) ||
            ( x  < std::numeric_limits<int>::min()))
        {
            std::cout << "Invalid value.\n";
        }
        else // nope, so return our good x
            return x;
    }
}

对于字符串解析几乎总是成功的,但是您需要一些比较字符串的机制和一个允许的字符串。尝试使用std::find()和一些包含允许选项的容器,例如以pair<int,string>的形式,并在switch()语句中使用int index(或在您给它的函数中使用find_ifswitch())。

答案 2 :(得分:0)

问题在于此循环块中的条件

void xD(){
  string x;
  do{
    cout << "Retry\n";
    cin >> x;
  }while(true);
}

while(true)条件使其无论输入如何都会永久循环。要解决此问题,您可以更改条件:

void xD(){
  string x;
  do{
    cout << "Retry\n";
    cin >> x;
  }while(x!="bow");
 cout << "you bought the bow. and some other messages"<<endl;
}

那应该有用。但是,它对我来说仍然太复杂了。这可以简化为下面的代码段:

void shop(){
  string x;
  float coins = 500;
  float bow_cost = 200;

  cout  << "welcome to the shop\n";

  cout  << "Bow(bow)costs 150 coins.\n";

  cin >> x;
  while (x!="bow"){
    cout << "Retry\n";
    cin>>x;
  }
  cout << "you bought the bow.\n you now have " <<coins - bow_cost << " coins." << endl; cin >> x;

}

答案 3 :(得分:0)

考虑if()语句是one_direction道路,它检查条件,如果条件满足,它会转到括号,如果条件编译器通过{{1}有任何问题,请等等等等。并跳转以编译其他代码。

每次开始编译代码时,它都从if函数开始。您再次在int main()if语句中做错了 这是正确的代码。我做了必要的修改。

else