C编程,任何人都可以解释这个吗?

#include <stdio.h>

int main() {
    int c;

    while ((c = getchar()) != EOF) {
        if (c == 't')
            printf("t");
        else if (c == 'b')
            printf("b");
        else if (c == '')
            printf("\");
        else 
            putchar(c);
    }
    return 0;
}   

在这种情况下输入

hi how are youdoing

我得到一个输出

hithowtaretyoudoing

#include <stdio.h>

int main() {
    int c;

    while ((c = getchar()) != EOF) {
        if (c == 't') {
            c = 'b';
            printf("t");
        }
        if (c == 'b') {
            c = 'b';
            printf("b");
        }
        if (c == '') {
            c = 'b';
            printf("\");
        }
        putchar(c);
    }
    return 0;
}   

当我用输入运行这个程序

hi    how    are    youdoing

(大空间是标签)

我得到这个输出

hithowtaretyoudoing

码:

#include <stdio.h>

int main() {
    int c;
    c = 'b'; 
    putchar(c);
    return 0;
}

在运行这个,我什么也没得到。 没有输出。 回到shell提示符。

更确切地说,在第一个程序我得到我想要的输出,但在第二个方案,我得到的每一个反斜杠后t但毕竟不是我希望为输出正在研究如何t变成t ,是' b'造成的吗? 如果是,它是如何工作的? 但如果是这样,为什么第三个程序中不会发生同样的情况?

运行rasbian默认的gcc编译器和mingw msys-gcc的windows包。


第二个程序如此行事的原因是因为if块输入了多个:

    if (c == 't') {
        c = 'b';
        printf("t");
    }
    if (c == 'b') {
        c = 'b';
        printf("b");
    }
    if (c == '') {
        c = 'b';
        printf("\");
    }
    putchar(c);

当你遇到一个标签,在进入第一块地方打印t到屏幕上,然后改变c到退格。

然后输入第二个块,因为c是一个退格(因为你只是改变了它)。 然后该块将b打印到屏幕上,所以现在你在屏幕上有tb

当你调用putchar写退格时, b将被下一个字符覆盖。 所以,当下一个字符被写入时,你在屏幕上有t

所以这里的问题是你正在多次测试c ,并且可能会在两者之间进行更改。 这种情况只发生在选项卡上的原因是您首先检查选项卡,然后选择退格,然后选择反斜杠。

如果您使用else if而不是if ,则不会输入多个块:

if (c == 't') {
    c = 'b';
    printf("t");
}
else if (c == 'b') {
    c = 'b';
    printf("b");
}
else if (c == '') {
    c = 'b';
    printf("\");
}
putchar(c);

通过这种改变,给定原始输入,输出将是:

hihowareyoudoing
链接地址: http://www.djcxy.com/p/84413.html

上一篇: C programming, Can anyone explain this?

下一篇: Macros evaluation in c programming language