[英](C++) How to validate user input for char variables?
我在比較用戶輸入的char變量時遇到問題。 我想檢查他們是否回答一個問題。 如果他們沒有輸入Y或NI,則想給用戶一條錯誤消息並開始循環。
下面是我創建的測試代碼,將其作為要使用的程序的模板。 無論用戶提供什么輸入,程序都會循環執行。 另外,如果用戶輸入“ n”個字符,他們將收到“ n”個“ Failure!”。 消息以及初始cout消息。 如果他們輸入Y,那么它也會發生,當然會顯示“成功!”。
我在網上環顧四周,但尚未找到解決此問題的人。 為什么==對於等效性檢查有效,而!=對於字符(對於字符串也無效)無效?
#include<iostream>
using namespace std;
int main()
{
char answer;
do{
cout <<"\nPlease type Y or N." << endl;
cin >> answer;
if ((answer == 'Y') || (answer == 'N'))
{
cout << "\nSuccess!" << endl;
}
else
{
cout << "\nFailure!" << endl;
}
}while ((answer != 'Y') || (answer != 'N'));
return 0;
}
問題在於以下幾行:
while ((answer != 'Y') || (answer != 'N'));
這些條件之一始終為true,並且您正在應用邏輯OR,因此您永遠也無法擺脫這種循環。 您需要進行如下更改:
while (answer != 'Y' && answer != 'N')
您誤用了Boole的邏輯:對析取詞的否定並不等於在保留析取詞時對術語的否定。 相反,您需要取反這些術語並使用連詞。
answer
將永遠不是'Y'
或'N'
((answer != 'Y') || (answer != 'N'))
你可能會提到
((answer != 'Y') && (answer != 'N'))
((answer != 'Y') || (answer != 'N'));
一直循環直到用戶輸入不同於'Y'
或不同於'N'
,所以當輸入'Y'
或'N'
時它就存在,因為它們當然是不同的。
您應該像下面的代碼塊那樣循環:
do {
// code
} while ( answer == 'Y' && answer == 'N' );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.