|
|
发表于 2026-8-9 19:27:24
|
显示全部楼层
你的疑问在于:getchar 每次读一个字符,那 printf 是怎么做到“依次向后读取”的?其实它们属于两个方向的操作,不要混淆。
- getchar() 负责从输入流(键盘/缓冲区)读取字符,每调用一次,内部会记住当前读取位置,下次调用自动读下一个字符。
- printf() 负责向屏幕输出,如果使用 %s 输出字符串,它会从你提供的地址开始,依次读取内存中的字符,直到遇到 '\0' 才停止。
所以,如果你用 ch = getchar() 只能保存当前读到的那个字符。要想连续读多个字符,必须循环调用 getchar,并把它们存起来。
例如:
- char buf[100];
- int i = 0;
- int ch;
- while ((ch = getchar()) != '\n' && i < 99) {
- buf[i++] = ch;
- }
- buf[i] = '\0'; // 手动添加字符串结束符
- printf("%s\n", buf); // 从 buf 首地址开始依次输出
复制代码
这里 getchar 每次循环读取一个字符存入 buf,循环结束后 buf 中保存了一串字符,printf 用 %s 输出时,就会从 buf[0] 开始逐个输出,直到遇到 '\0'。
如果只是输出单个字符,直接用:
- char ch = getchar();
- printf("%c\n", ch);
复制代码
注意:getchar 返回的是 int 类型,建议用 int 保存,避免把 EOF 误判成普通字符。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|