2015-12-22 24 views
-1

在下面的代碼中,無論我做什麼,它都會永久循環並永遠顯示「語法錯誤」。不想要的結果,在循環c中

此代碼需要檢查答案既不是'y'也不是'n'。如果再次要求的答案,然後如果回答「Y」,它會循環再次全部FUNC 如果答案是「N」就應該什麼都不做......

char answer = ' '; 
int round = 0; 
do 
{ 
    round = chooseLevel(); 
    guess(round); 
    while ((answer != 'y') || (answer != 'n')) 
    { 
     printf("\nWould you like to play again? (y/n): "); 
     answer = getch(); 
     putch(answer); 
     printf ("\nchar is %c\n", answer); 
     if ((answer != 'y') || (answer != 'n')) 
     { 
      printf("Syntax Error"); 
     } 
    } 
} 
while (answer == 'y'); 
+0

現在,您應該如何使用短語「Syntax Error」。這樣的錯誤是當你的代碼有缺陷時(例如缺少'''',',',';'或']')。 – Mast

+1

@Mast:「syntax」具有更廣泛的含義,只是指代碼,也可以適用於自然語言,或者Yoda的酷刑語法會使其具有「自然語言適用於它」*。不過,你說的這個詞在這種情況下是不恰當的。 – Clifford

回答

3

條件應與&&和不||

(answer != 'y') && (answer != 'n') 

answer不能同時爲 'Y' 和 'n',所以無論是answer != 'y'answer != 'n'將爲真。在||的情況下,整個陳述將變爲true

True || False => True 
+0

非常感謝你! –

+0

@RuslanVer不客氣。 –

+1

或者如果您願意,也可以使用等效的'!(answer =='y'|| answer =='n')'。 (德摩根定理) – Clifford

3

開關||&&。目前,如果answery,則ifwhile條件將評估爲('y' != 'y') || ('y' != 'n')(false) || (true) = true。擺脫while循環的唯一方法是讓answer在某種程度上等於yn

+0

非常感謝! –