0

程序示例如下:

int main(void)
{
    char input;

    printf("\nEnter phone number: ");

    while ((input = getchar()) != '\n') {

        switch (toupper(input)) {
            case 'A': case 'B': case 'C':
                printf("2");
                break;
            case 'D': case 'E': case 'F':
                printf("3");
                break;
            case 'G': case 'H': case 'I':
                printf("4");
                break;
            case 'J': case 'K': case 'L':
                printf("5");
                break;
            case 'M': case 'N': case 'O':
                printf("6");
                break;
            case 'P': case 'R': case 'S':
                printf("7");
                break;
            case 'T': case 'U': case 'V':
                printf("8");
                break;
            case 'W': case 'X': case 'Y':
                printf("9");
                break;
            default:
                putchar(input);
        }
    }

    printf("\n\n");

    return 0;
}

我的问题是,地球上的水流是如何运作的?我似乎无法理解程序采用的路径。char变量会神奇地变成一个数组吗?如何putchar()打印整行而不是输入的第一个字符?应该如何获取和打印一个字符,读取并打印一整行字符,同时使用 switch 语句更改它们?它是否在输入时对其进行测试char?但是,字符串是如何打印为字符串的呢?

编辑:我做了一些研究,我读到了一个键盘缓冲区,这似乎是我困惑的原因。据我所知,getchar()接收putchar()和输出单个字符。我知道循环会在getchar()返回时不断询问下一个“缓冲”字符,我应该得到它仍然有点困惑,但更令人困惑的是putchar(). 在循环结束时,当它中断并进入条件时,它是否打印一个字符,然后在每次执行循环时继续打印另一个字符?仅在读取新行时停止循环?如果是这样,只有以前打印的内容会显示在屏幕上吗?然后如果是这种情况,那么打印的字符会在每次执行时彼此相邻打印,从而产生字符串的错觉?我需要对此进行确认,以及何时char丢弃和更换?印完之后?它在哪一行接收next缓冲区队列中的字符?

4

0 回答 0