程序示例如下:
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
缓冲区队列中的字符?