簡體   English   中英

輸入終止參數后,為什么while循環繼續運行?

[英]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時終止。 但是,在您原始狀態下,這種情況永遠不會發生,因為:

  1. 所有這三個條件不可能同時發生(假)。 值不能是'。','!'和'?' 與此同時。

  2. 這意味着:您的三個條件中至少有兩個總是評估為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM