【问题标题】:C++ do-while loopC++ do-while 循环
【发布时间】:2018-05-09 09:16:15
【问题描述】:

伙计们! 我正在用 C++ 编写一个程序来演示“do-while”循环。只要不是“再见”,程序就会简单地回显用户键入的任何内容。 因此,如果用户输入“嘿”,程序会回显“嘿”,如果用户输入“再见”,程序就会停止。这是代码:

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

int main()
{ 
string wordString;

do
{
    cout << "\nEnter a word: ";
    getline(cin, wordString);
    cout << "\nYou entered: " << wordString<<"\n";
} while ((wordString!="goodbye")||(wordString!="Goodbye"));

return 0;
} 

我想做的是让程序在用户输入“再见”或“再见”时停止。所以我添加了||检查它,但它不起作用,并且 循环语句只是继续执行。 但是当我把 && 而不是 ||它工作正常,只要输入“再见”或“再见”,程序就会停止。

所以我的问题是:为什么 && 工作和 ||不是吗?

【问题讨论】:

  • 在一张纸上为wordString 分配不同的值,并查看每个条件的评估结果。这真的值得对 SO 提出一个完整的问题吗?
  • 只需申请De Morgan's law,您就会明白为什么。
  • 逻辑; while 将始终等于 1 与 OR。使用 AND,当任一条件为 0 时,while 将为 0。
  • 你有没有想过?
  • 没有帮助,@manni66

标签: c++ loops operators do-while


【解决方案1】:

您必须使用logical and &amp;&amp; 而不是or ||,因为如果只有wordstring 不等于“goodbye”且不等于“GOODBYE”,您就想打破循环:

while( wordString != "goodbye") && (wordString != "Goodbye");

或者你可以这样使用OR ||

while(wordString == "goodbye" || wordString == "Goodbye");

如您所见,如果wordString 包含"goodbye""GOODBYE",则中断。如果任一操作数非零,则逻辑 OR 返回 true,如果两者都为零,则返回 false。逻辑与“&&”仅当两个操作数非零时返回 true,否则返回 false (0)。

如果用户输入"Goodbye",我可以看到什么;大写字母的第一个字符或任何大小写字母的混合,然后你会编程看起来很荒谬;因为它不会损坏。

解决方法是您可以将输入文本转换为全大写或小写字母,然后只检查一个值:

std::string wordString = "GoodBye";
for(int i(0); i < wordString.length(); i++)
    wordString[i] = to_upper(wordString[i]);

// wordString = "GOODBYE"

 // ....
 while(wordString != "GOODBYE");

【讨论】:

    【解决方案2】:

    使用|| 不会停止程序,因为它是 OR 运算符,这意味着当语句中的任何一个为真时它将为真,因此如果任何一个为真,那么它将在另一方面执行 AND(@ 987654322@) 运算符,这意味着两个语句都必须为真才能执行。

    【讨论】:

      猜你喜欢
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      相关资源
      最近更新 更多