![](/img/trans.png)
[英]why my loop keeps repeating after I entered the input of the program correctly
[英]Why does the while loop keeps running after I entered the termination parameters?
輸入應該終止循環的符號后,為什么while循環不會中斷。 (C)
printf("Enter a sentence: ");
do
{
message[i] = getchar();
i++;
}while(message[i - 1] != '.' || message[i - 1] != '!' || message[i - 1] != '?');
如果我放 ? 要么 ! 最后它只是繼續運行。 怎么了?
你的while循環的條件很簡單,因為角色不能同時全部三個。你要找的是
printf("Enter a sentence: ");
do
{
message[i] = getchar();
i++;
}while(message[i - 1] != '.' && message[i - 1] != '!' && message[i - 1] != '?');
將while語句中的或更改為和。
對於“或”,只要存在“True”,整個語句的計算結果為True。 因此,您原來的“while”條件始終評估為“True”。
'while'僅在條件評估為False時終止。 但是,在您原始狀態下,這種情況永遠不會發生,因為:
所有這三個條件不可能同時發生(假)。 值不能是'。','!'和'?' 與此同時。
這意味着:您的三個條件中至少有兩個總是評估為True。 因此,'while'永遠不會評估為False,因為True || False || False的任何排列都將計算為True。
如果您以交互方式輸入,則message[ i - 1 ]
幾乎肯定是\\n
。 檢查message[ i - 2 ]
嘗試這個:
printf("Enter a sentence: ");
int run = 1;
do {
message[i] = getchar();
i++;
if(getchar() != '!' && getchar() != '?' && getchar() != '.'){
run = 1;
} else {
run = 0;
}
}while(run == 1);
或者,我認為這可能有用:/
printf("Enter a sentence: ");
int run = 1;
do {
message[i] = getchar();
i++;
if(getchar() == '!' || getchar() == '?' || getchar() == '.'){
break;
}
}while(run == 1);
你需要將你的OR與ANDS交換。
消息[i-1]等於'。' 那個時期不等於'!' 和'?',因此你的循環將永遠是真的。
嘗試類似......
} while(message [i - 1]!='。'&& message [i - 1]!='!'&& message [i - 1]!='?');
(我頭頂的未經測試的代碼)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.