繁体   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