2014-02-25 35 views
0

我無法比較char變量的用戶輸入。我想檢查他們是否回答Y或N的問題。如果他們沒有輸入Y或N,我想給用戶一個錯誤信息並開始循環。(C++)如何驗證char變量的用戶輸入?

下面是我創建的測試代碼,作爲我打算使用它的程序的模板。無論用戶給出什麼輸入,程序都會循環。另外,如果用戶輸入'n'個字符,他們將會收到'n''失敗!'消息以及每次初始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; 
} 

回答

2

問題在以下行中:

while ((answer != 'Y') || (answer != 'N')); 

這些條件中的任何一個總是如此,並且您正在應用邏輯OR,因此您永遠無法退出此循環。你需要改變這個如下:

while (answer != 'Y' && answer != 'N') 
1

你錯誤地應用了布爾的邏輯:否定一個析取並不是否定術語,同時保持析取。相反,你需要否定條款並使用連詞。

0

((answer != 'Y') || (answer != 'N'));

手段循環,直到用戶輸入成纔不同於'Y'OR不同於'N',所以當進入'Y''N'因爲,當然,它們是不同的它存在。

你應該環路中的代碼follwing塊:

do { 
    // code 
} while (answer == 'Y' && answer == 'N'); 
+0

而且你也得到了你的邏輯倒退。它應該是'while(answer!='Y'&& answer!='N');' – ApproachingDarknessFish

+0

不是。你可以使用'!(answer =='Y'|| answer =='N')'或'answer!='Y'&& answer!='N'':應用Boole的邏輯! –

+0

當然,這就是我想寫的,複製粘貼沒有幫助我猜測 –

1

answer將始終不'Y'或不'N'

((answer != 'Y') || (answer != 'N')) 

你可能換貨

((answer != 'Y') && (answer != 'N'))