C ++ Do - While循环直到字符串符合某些条件

时间:2013-05-15 14:53:09

标签: c++ string do-while

我要求用户输入,但我希望问题保持在屏幕上,直到输入符合允许的输入之一。这是我的代码

string input = "";
string departure = "";

cout << "Please enter an airport code: ";

do 
{
    getline(cin,input);
    stringstream(input) >> departure;

} while(departure.compare("MAN") != 0 || departure.compare("EMA") != 0 || departure.compare("LHR") != 0 );
}

我希望它循环直到用户输入MAN或EMA或LHR;如果它们是小写的,我也希望它能被接受。

每次我运行它,即使我输入了正确的输入,它也只是继续输入文字而不做任何其他操作。

5 个答案:

答案 0 :(得分:3)

条件

 departure.compare("MAN") != 0 || departure.compare("EMA") != 0 || departure.compare("LHR") != 0
无论departure是什么,

始终为真。

compare在平等时返回0。所以你基本上告诉编译器的是

  

departure与“MAN” OR 不同于“EMA” OR 与“LHR”不同时运行循环。

答案 1 :(得分:1)

在while(...)语句中执行比较之前,请考虑使用boost :: to_upper将输入转换为大写。这将解决小写/大写问题。

http://www.boost.org/doc/libs/1_41_0/doc/html/boost/algorithm/to_upper.html

另外,在处理C ++字符串时,我建议您只需执行

出发==“MAN”||出发==“EMA”||出发==“LHR”

您不需要在C ++中执行string.compare,这与其他语言(例如Java)不同,因为==运算符被重载以比较字符串的/ content /,而不是字符串对象本身。

另外有人打败了我,因为比较方法在相等时返回0。

答案 2 :(得分:0)

你需要&amp;&amp;而不是||在你的条件下。

这个条件总是返回true,因为它不能同时全部为3。

&amp;&amp;输入是接受的3之一后,将返回false。

答案 3 :(得分:0)

首先你对while循环的条件不正确。现在它读取,虽然离开不是'MAN'或不是“EMA”或不是“LHR”,继续循环。因为离开并不是所有三个同时出现,所以循环永远不会结束。我建议用AND(和&amp;&amp;)

替换你的OR(||)

同样,每次执行循环都需要在离开时清除值,否则先前输入的行仍然存在,即使输入正确的机场代码,您的比较也会失败。

答案 4 :(得分:0)

我们的主要问题是字符串被错误地比较。假设我们输入“MAN”。

如果字符串不是“MAN”,则departure.comare("MAN") != 0将为true。好吧,我们输入“MAN”,所以这是假的。现在我们用departure.compare("EMA") != 0或者那个 - 这是真的,因为“MAN”不等于“EMA”。所以你需要用&&而不是||来梳理你的状况。

要修复“owercase”,有两种选择。将输入字符串转换为大写,或者与大小写(Man,MaN,mAn等)的所有不同组合进行比较 - 后者非常快速地变得非常繁琐。

请看一下这个以不区分大小写的方式比较字符串的一些选项: Case insensitive string comparison C++