2015-01-09 115 views
-4

我有這個程序我正在工作,由於某種原因,while循環未按照我預期的方式運行/預計它工作。儘管循環運行,無論正確/不正確的輸入

#include <iostream> 
using namespace std; 
int main() { 

const int size = 5; 
char answer_sheet[size] = {'B','D','A','A','C'}; //'A','B','A','C','D','B','C','D','A','D','C','C','B','D','A'}; 
char student_answer[size]; 

char answer; 


for(int i=0;i<size;i++) 
{ 
    cout << i+1 << ": "; 
    cin >> answer; 
    cout << endl; 
    while(answer != 'A' || answer != 'B' || answer != 'C' || answer != 'D') 
    { 
     cout << "You must enter either A, B, C, or D" << endl; 
     cout << i+1 << ": "; 
     cin >> answer; 
     cout << endl; 

    } 
    student_answer[i] = answer; 

} 

return 0; 
} 

我輸入一個字符A,B,C,或d,當我輸入了正確的方式,我進入while循環,當我不是假設,除非我輸入錯誤的字符。

我似乎無法弄清楚問題所在。

感謝

+0

:)我覺得這些稱號好笑。閱讀「'<基本的C + +概念>'不工作,因爲它應該是」因爲「沒有工作,因爲我期望它的工作」 –

+0

呃我的英語不是最大的。 – Sinan

回答

1

你忘了C和d(可能是錯字):

while(answer != 'A' || answer != 'B' || answer != 'A' || answer != 'B') 

也許你想:

while (answer != 'A' 
     && answer != 'B' 
     && answer != 'C' 
     && answer != 'D') 
{ 
} 

另一種方法:

const std::string allowable_answers = "ABCD"; 
//... 
while (allowable_answers.find(answer) == std::string::npos) 
{ 
    // answer is not in the allowable set. 
} 
+0

是的,這是一個錯字我的壞。 – Sinan

2

answer != 'A' || answer != 'B'總是如此,對於任何answer價值。 您的意思是&&而不是||

1

你要找的條件是

while(answer != 'A' && answer != 'B' && answer != 'C' && answer != 'D') 

的||應該是& &在每種情況下,你也不應該檢查'C'或'D'

0

首先,你爲什麼不使用do/while循環而不是while循環。其次,你有

while(answer != 'A' || answer != 'B' || answer != 'A' || answer != 'B') 
{ 
    cout << "You must enter either A, B, C, or D" << endl; 
    cout << i+1 << ": "; 
    cin >> answer; 
    cout << endl; 

} 

如果沒有輸入A,B,C,D不應該程序循環?如果A,B,A,B不是答案,你有這個循環。一個do/while循環將進入循環並繼續循環,如果正確的答案一直沒有輸入