当用户从命令行进入“exit”时,我想退出do-while循环。我试图在不使用strcmp()的情况下这样做,但它只是没有执行我认为它应该如何。当测试它时,如果用户为第一个字符输入e,或者为第二个字符输入x,或者为第三个字符输入i,或者为第四个字符输入t,则程序退出。这可能是我想念的简单事情。所以任何人都可以解释为什么这不符合我的期望?感谢。
#include <stdio.h>
#define FLUSH while(getchar() != '\n');
int main(){
char input[20] = {0};
printf("This is a string math program. Enter a string 9 characters or less"
" followed by an operater and finally another string 9 characters or less."
" There should be no spaces entered. To exit the program type exit.\n");
do{
printf("Input: ");
scanf("%s",input);
FLUSH
} while((input[0] != 'e') && (input[1] != 'x') && (input[2] != 'i') && (input[3] != 't'));
}
答案 0 :(得分:1)
我们来谈谈De Morgan's Law。这样:
(input[0] != 'e') && (input[1] != 'x') && (input[2] != 'i') && (input[3] != 't')
要使循环继续,必须为true。它相当于:
!(input[0] == 'e' || input[1] == 'x' || input[2] == 'i' || input[3] == 't')
所以是的,当任何字符匹配时,你的循环将停止。只需使用strcmp,但如果由于某些奇怪的原因你不能,只需改变上面的逻辑。