当前位置:  开发笔记 > 编程语言 > 正文

`getchar()`在哪里存储用户输入?

如何解决《`getchar()`在哪里存储用户输入?》经验,为你挑选了2个好方法。

我开始阅读" C语言编程语言 "(K&R),我对这个getchar()功能有所怀疑.

例如这段代码:

#include 

main()
{
  int c;

  c = getchar();
  putchar(c);
  printf("\n");   
}

键入toomanychars+ CTRL+ D(EOF)打印t.我认为这是预期的,因为它是第一个引入的角色.

但接下来是另一段代码:

#include 

main()
{
  int c;

  while((c = getchar()) != EOF) 
    putchar(c);
}

键入toomanychars+ CTRL+ D(EOF)打印toomanychars.

我的问题是,如果我只有一个char变量,为什么会这样?其余的字符存储在哪里?

编辑:

感谢大家的答案,我现在开始明白......只有一个问题:

当给定CTRL+ D时,第一个程序退出,而第二个程序打印整个字符串,然后等待更多用户输入.为什么它等待另一个字符串并且不像第一个那样退出?



1> coobird..:

getchar 从标准输入获取单个字符,在这种情况下是键盘缓冲区.

在第二个例子中,getchar函数处于一个while循环中,一直持续到它遇到a EOF,因此它将保持循环并检索一个字符(并将字符打印到屏幕),直到输入变空.

连续调用getchar将获得来自输入的连续字符.

哦,不要因为问这个问题而感到难过 - 当我第一次遇到这个问题时,我感到很困惑.



2> Carson Myers..:

它将输入流视为文件.就好像你打开了一个包含文本"toomanychars"的文件,并一次读取或输出一个字符.

在第一个例子中,在没有while循环的情况下,就像你打开一个文件并读取第一个字符,然后输出它.然而,第二个示例将继续读取字符,直到它获得文件结束信号(ctrl+D在您的情况下),就像它从磁盘上的文件读取一样.


在回复您更新的问题时,您使用的操作系统是什么?我在我的Windows XP笔记本电脑上运行它并且工作正常.如果我按下回车键,它会打印出我到目前为止的内容,换行,然后继续.(该getchar()功能在您按Enter键之前不会返回,这是在调用时输入缓冲区中没有任何内容的情况).当我按下CTRL+Z(Windows中的EOF)时,程序终止.请注意,在Windows中,EOF必须位于其自己的行上才能在命令提示符中计为EOF.我不知道这种行为是否在Linux或任何你可能运行的系统中被模仿.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有