C - While循环没有退出字符串输入的预期

时间:2014-09-24 23:43:37

标签: c do-while

当用户从命令行进入“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'));
}

1 个答案:

答案 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,但如果由于某些奇怪的原因你不能,只需改变上面的逻辑。