我想创建一个程序,当用户输入我没有定义的内容时,程序会再次提示他。
我用if语句做了它,但它只循环了一次而且没有再做。我尝试了循环,但只要输入为假,它就会破坏条件并拒绝所有输入。在c ++中。
非常感谢任何帮助。
*/
答案 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_if
和switch()
)。
答案 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