为什么输入应该终止循环的符号后,while循环中断没有。 (C)
printf("Enter a sentence: ");
do
{
message[i] = getchar();
i++;
}while(message[i - 1] != '.' || message[i - 1] != '!' || message[i - 1] != '?');
如果我放。 ?要么 !最后它只是继续运行。怎么了?
答案 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时终止。但是,在原始状态下,这种情况永远不会发生,因为:
这三个条件不能同时发生(假)。价值不能是','!','?'在同一时间。
这意味着:您的三个条件中至少有两个总是评估为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>
(未经测试的代码在我的头顶)