输入终止参数后,为什么while循环继续运行?

时间:2014-12-29 02:08:52

标签: c while-loop do-while

为什么输入应该终止循环的符号后,while循环中断没有。 (C)

 printf("Enter a sentence: ");
do
{
    message[i] = getchar();
    i++;
}while(message[i - 1] != '.' || message[i - 1] != '!' || message[i - 1] != '?');

如果我放。 ?要么 !最后它只是继续运行。怎么了?

5 个答案:

答案 0 :(得分:2)

你的while循环的条件很简单,因为角色不能同时全部三个。你要找的是

printf("Enter a sentence: ");
do
{
    message[i] = getchar();
    i++;
}while(message[i - 1] != '.' && message[i - 1] != '!' && message[i - 1] != '?');

答案 1 :(得分:1)

在while语句中更改或更改。

对于"或",只要有" True",整个语句的计算结果为True。因此,您的原创' while'条件始终评估为" True"。

'虽然'仅在条件计算结果为False时终止。但是,在原始状态下,这种情况永远不会发生,因为:

  1. 这三个条件不能同时发生(假)。价值不能是','!','?'在同一时间。

  2. 这意味着:您的三个条件中至少有两个总是评估为True。因此,' while'永远不会评估为False,因为True || False || False的任何排列都将评估为True。

答案 2 :(得分:0)

如果您以交互方式输入,message[ i - 1 ]几乎肯定是\n。检查message[ i - 2 ]

的值

答案 3 :(得分:0)

试试这个:

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);

答案 4 :(得分:0)

你需要将你的OR与ANDS交换。

虽然消息[i-1]等于'。'那个时期不等于'!'和'?',因此你的循环永远是真的。

尝试类似......

} while(message [i - 1]!='。'&amp;&amp; message [i - 1]!='!'&amp;&amp; message [i - 1]!='?'); < / p>

(未经测试的代码在我的头顶)