簡體   English   中英

(C ++)如何驗證用戶輸入的char變量?

[英](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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM