Pab*_*dez 7 c io loops kernighan-and-ritchie
我开始阅读" C语言编程语言 "(K&R),我对这个getchar()功能有所怀疑.
例如这段代码:
#include <stdio.h>
main()
{
int c;
c = getchar();
putchar(c);
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)
键入toomanychars+ CTRL+ D(EOF)打印t.我认为这是预期的,因为它是第一个引入的角色.
但接下来是另一段代码:
#include <stdio.h>
main()
{
int c;
while((c = getchar()) != EOF)
putchar(c);
}
Run Code Online (Sandbox Code Playgroud)
键入toomanychars+ CTRL+ D(EOF)打印toomanychars.
我的问题是,如果我只有一个char变量,为什么会这样?其余的字符存储在哪里?
编辑:
感谢大家的答案,我现在开始明白......只有一个问题:
当给定CTRL+ D时,第一个程序退出,而第二个程序打印整个字符串,然后等待更多用户输入.为什么它等待另一个字符串并且不像第一个那样退出?
getchar 从标准输入获取单个字符,在这种情况下是键盘缓冲区.
在第二个例子中,getchar函数处于一个while循环中,一直持续到它遇到a EOF,因此它将保持循环并检索一个字符(并将字符打印到屏幕),直到输入变空.
连续调用getchar将获得来自输入的连续字符.
哦,不要因为问这个问题而感到难过 - 当我第一次遇到这个问题时,我感到很困惑.
它将输入流视为文件.就好像你打开了一个包含文本"toomanychars"的文件,并一次读取或输出一个字符.
在第一个例子中,在没有while循环的情况下,就像你打开一个文件并读取第一个字符,然后输出它.然而,第二个示例将继续读取字符,直到它获得文件结束信号(ctrl+D在您的情况下),就像它从磁盘上的文件读取一样.
在回复您更新的问题时,您使用的操作系统是什么?我在我的Windows XP笔记本电脑上运行它并且工作正常.如果我按下回车键,它会打印出我到目前为止的内容,换行,然后继续.(该getchar()功能在您按Enter键之前不会返回,这是在调用时输入缓冲区中没有任何内容的情况).当我按下CTRL+Z(Windows中的EOF)时,程序终止.请注意,在Windows中,EOF必须位于其自己的行上才能在命令提示符中计为EOF.我不知道这种行为是否在Linux或任何你可能运行的系统中被模仿.
| 归档时间: |
|
| 查看次数: |
6584 次 |
| 最近记录: |