繁体   English   中英

在C ++中测试作业中的字符串输入时,无法退出while循环(作为数据验证)

[英]Unable to exit while loop (as data validation) while testing for string input in homework problem in C++

我正在尝试编写一个简单的程序,查看用户是否符合贷款条件。

我正在尝试进行验证,以确保用户不会输入乱码,而当我输入时,即使不再正确,也不会退出while循环。

while循环不起作用。

#include <iostream>
using namespace std;

int main() {
  string employed;

  cout << "Are you currently employed?\n";
  cin >> employed;

  while (employed != "yeah" || employed != "no" || employed != "yes" ||
         employed != "Yes") {
    cout << "Enter yes or no.";
    cin >> employed;
  }
  // ...
}

当然,您将无法传递while循环,所有字符串都将满足while条件。 我想你的意思是:

while (employed != "yeah" && employed != "no" && employed != "yes" && employed != "Yes")

即, employed的不是受控输入。

只需更改|| &&while条件。

while (employed != "yeah" && employed != "no" && employed != "yes" && employed != "Yes")
{
    cout << "Enter yes or no.";
    cin >> employed;
}

我将尝试更详细地解释问题所在,让我们先简化一下while条件:

while (employed != "yes" || employed != "no")

这意味着只要内部表达式的计算结果为true,循环就会运行。 假设用户输入"yes" 以下是如何将逐步发挥出来,代替employed它的值"yes"

1) while ("yes" != "yes" || "yes" != "no")

我们可以看到"yes" != "yes"false ,所以我们将其填写

2) while (false || "yes" != "no")

现在我们评估or ||的右侧 操作员。 "yes" != "no"好,yes等于no,所以这是真的

3) while (false || true)

由于它是逻辑运算符,因此只要至少一个操作数为true,结果就为true。 我们有一个真和一个假,所以|| 运算符结果为true

4) while (true)

因此,您的循环永远不会退出,因为左右至少之一始终为true。 而是使用and运算符&& ,仅当两个运算符均为true时,才为true:

while (employed != "yes" && employed != "no")

只要被雇用不是“是”,我们就可以理解为“继续”,被雇用不是“否”,您可以根据需要添加更多的单词。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM