[英]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.