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

标签 c loops io kernighan-and-ritchie

我已经开始阅读“The C Programming Language”(K&R),我对 getchar() 函数有疑问。

例如这段代码:

#include <stdio.h>

main()
{
  int c;

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

键入 toomanychars + CTRL+D (EOF) 仅打印 t。我认为这是意料之中的,因为它是第一个引入的角色。

但是接下来的这段代码:

#include <stdio.h>

main()
{
  int c;

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

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

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

编辑:

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

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

最佳答案

getchar 从标准输入中获取单个字符,在本例中为键盘缓冲区。

在第二个例子中,getchar 函数在 while 循环中,一直持续到遇到 EOF,所以它会一直循环下去并检索一个字符(并将该字符打印到屏幕上)直到输入变空。

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

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

关于c - `getchar()` 在哪里存储用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1004314/

相关文章:

c - 如何在c中操作输入文件中的数据?

java - fileInputStream 和 Scanner 类之间差异背后的逻辑

c - SO_NOSIGPIPE 未声明

loops - 如何使用现有的for循环在Liquid模板中进行n次循环

loops - 在Teradata中捕获插入错误

javascript - 在数组中创建循环迭代列表

我可以使用 xmlzipio 通过 xmlReadMemory 从内存中读取 xml 吗?

c++ - 整数除法的渐近估计

c++ - 如何计算文本文件中的所有数字?

c - 为什么这个程序会崩溃?