【问题标题】:C++ Do - While loop until a string meets certain criteriaC++ Do - While 循环直到字符串满足特定条件
【发布时间】: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;如果它们是小写的,我也希望它被接受。

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

【问题讨论】:

    标签: c++ string do-while


    【解决方案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++

          【讨论】:

          • 谢谢,但是当我输入错误的输入时,它会进入下一行,有没有办法把它放在问题旁边?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-11-09
          • 1970-01-01
          • 2021-12-24
          • 1970-01-01
          • 2020-02-07
          • 2020-06-16
          • 1970-01-01
          相关资源
          最近更新 更多