为什么getchar()读取整行?

时间:2016-04-24 21:25:42

标签: c string character getchar putchar

该程序的样本是程序就是这个

int main(void) {     char输入;

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的输入?但那么字符串如何打印成字符串?

编辑:iv做了一些研究,我读到了一个键盘缓冲区,这似乎是我混淆的原因。据我所知,getchar和putchar接收并输出一个字符。我知道循环要求下一个"缓冲"当getchar回来时,char仍然有点困惑,我应该得到它,但更令人困惑的是putchar。在循环结束时,当它中断n进入条件时,是否打印出一个字符然后继续并在每次执行循环时逐个打印另一个字符?只停止读取新行的循环?如果是这样,屏幕上只显示以前打印过的内容?然后,如果是这样的话那么印刷的字符会在每次执行时彼此相邻打印,给出一个字符串的错觉?我需要对此进行确认,并且,什么时候丢弃并更换了字符?印刷后?它在哪一行接收缓冲队列中的下一个字符

0 个答案:

没有答案