C++ Do - While 循环直到字符串满足特定条件

Posted

技术标签:

【中文标题】C++ Do - While 循环直到字符串满足特定条件【英文标题】:C++ Do - While loop until a string meets certain criteria 【发布时间】:2013-05-15 14:53:08 【问题描述】:

我要求用户输入,但我希望问题一直显示在屏幕上,直到输入满足允许的输入之一。这是我的代码

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;如果它们是小写的,我也希望它被接受。

每次我运行它时,即使我输入了正确的输入,它也只是不断地输入单词而不做任何其他事情。

【问题讨论】:

【参考方案1】:

条件

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

总是为真,无论 departure 是什么。

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

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

【讨论】:

还有其他方法可以将出发时间与这些字符串进行比较吗? @MrHeisenberg compare 是正确的,你只需要重新思考逻辑。不要只是在那里输入&amp;&amp;,而是要真正尝试理解。【参考方案2】:

你需要 && 而不是 ||在你的情况下。

此条件始终返回 true,因为它不能一次全部为 3。

只要输入是接受的 3 个之一,&& 就会返回 false。

【讨论】:

【参考方案3】:

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

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

另外,在处理 C++ 字符串时,我建议你干脆这样做

出发 == "人" ||出发 == "EMA" ||出发==“LHR”

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

还有其他人在比较方法相等时返回 0 的问题上击败了我。

【讨论】:

【参考方案4】:

首先,您的 while 循环条件不正确。现在它显示,当离开​​不是“MAN”或不是“EMA”或不是“LHR”时,继续循环。因为不能同时离开他们三个,所以循环永远不会结束。我建议用 AND (&&) 替换你的 OR (||)

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

【讨论】:

【参考方案5】:

我们的主要问题是字符串的比较不正确。假设我们输入“MAN”。

如果字符串不是“MAN”,departure.comare("MAN") != 0 将为真。好吧,我们输入了“MAN”,所以它是错误的。现在我们将其与departure.compare("EMA") != 0 或 - 这是真的,因为“MAN”不等于“EMA”。因此,您需要将您的条件与&amp;&amp; 结合起来,而不是||

要修复“大写”,有两种选择。要么将输入字符串转换为大写,要么与所有不同的小写和大写组合(Man、MaN、Man等)进行比较——后者很快就会变得非常乏味。

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

【讨论】:

谢谢,但是当我输入错误的输入时,它会进入下一行,有没有办法把它放在问题旁边?

以上是关于C++ Do - While 循环直到字符串满足特定条件的主要内容,如果未能解决你的问题,请参考以下文章

do while“直到”型循环

在 do while 循环内部,我想在 c# 中每 1 分钟执行一次特定代码,直到条件满足

C++中,do while, for loop和while loop之间有啥不同

java基础循环语句

UiPath循环活动Do While的介绍和使用

UiPath循环活动Do While的介绍和使用