簡體   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