无法弄清楚C程序中的逻辑错误

bor*_*ree 5 c logic boolean-logic boolean-expression

一个程序,每行打印一个输入的单词.

int main() {

    int c;

    while ((c=getchar()) != EOF) {

        if (c== ' ' || c== '\n' ||c == '\t')
                putchar('\n');
        else {
            putchar(c);
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的程序正确打印结果,每行一个字.在相应地改变条件之后,我期望下面的程序也每行打印一个单词.但是我没有得到正确的结果.我犯了一些愚蠢的错误还是错了?

int main() {

    int c;

    while ((c=getchar()) != EOF) {

        if (c != ' ' || c != '\n' || c != '\t')
            putchar(c);
        else {
            putchar('\n');
        }
    }

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

MBy*_*ByD 16

条件的正确变化是:

if (!(c == ' ' || c == '\n' || c == '\t'))
Run Code Online (Sandbox Code Playgroud)

要么

if (c != ' ' && c != '\n' && c != '\t')
Run Code Online (Sandbox Code Playgroud)

参见德摩根定律