的問題在於您的病情:
} while((temp!='x')||(temp!='X'));
這意味着:重複,而它要麼是不等的 'X' 或 'X'。 (這始終是真實的,因爲它只能是一個或另一個 替換爲這樣:。
} while(temp != 'x' && temp != 'X');
重複,同時它也不「X」或「X」 同樣的問題是在你的if
進一步起來(我似乎已經忽略了周圍這是第一次,我的壞)
你的代碼可以重建是這樣的:
int main(){
chu input;
char temp;
while(true) {
printf("\nInput: ");
temp=getche();
if(temp != 'x' && temp != 'X')
printf("\nWrong input (only 'x' or 'X')");
else {
input.c=temp;
break;
}
}
}
此代碼將永遠循環下去(如while(true)
所示)但只要輸入'x'或'X',它就會將變量設置爲您的結構體並且不受循環的影響。
約語義的小信息:作爲第一個條件返回true
任何由OR(||
)連接停止被評估,一旦。那一刻,無論如何,整個構造將返回true
。
相反,只要第一個條件返回false
,您連接的任何東西都會停止評估,因爲它無論如何都會使整個構造false
。
要回到你的榜樣,這是你的編譯器做什麼,假設我們輸入「X」
if(temp != 'x') { //Okay, it's not 'x'. Let's try the next one.
if(temp != 'X') { //Oh wait, it IS X. I can't stop yet!
//Stop looping
} //This will be executed
}
//Loop me!
而且這是它與&&
if(temp == 'x') { //Hmm...not 'x'.
if(temp == 'X') { //Oh wait! It IS 'X'.
//Stop looping //This gets executed.
}
}
//Loop me!
做你可能已經注意到,我在這裏將!=
更改爲==
。我可以做到這一點,因爲二進制算術。 NOT(x OR X)等於(NOT x AND NOT X)。
,而條件是正確的,我認爲檢查什麼OP需要 –
@GrijeshChauhan我的理解是,他想程序停止一次X || X是輸入,是不是正確的?然而,這個程序設置的方式,無論你輸入什麼,它都會無限循環。 –
抱歉,延遲響應:可以找到爲什麼這是錯誤的(temp!='x'&& temp!='X'); ** **提示**嘗試兩次temp ='X'和temp temp ='a ' –