c - 使用标准输入时等待 EOF

标签 c file-io

所以我正在做一些事情,要求我让用户在命令窗口中输入尽可能多的内容,包括新行,然后在他们按下 CTRL+D(EOF 字符)后我应该能够打印出来已键入的所有内容。

我能够弄清楚如何在每一行中做到这一点。

#include <stdio.h>

int main() 
{
  int C;

  C = getc(stdin);

  while(C != EOF)
  {
    putc(C, stdout);
    C = getc(stdin);
  }

  return 0;
}

我也只能使用 getc 和 putc。最终,我想让用户尽可能多地键入他们想要的内容,然后根据他们使用命令发送的标志,我将使用 getopt 修改他们给我的输入。

编辑:抱歉忘记添加我的问题。我想要做的是等待用户输入所有输入,然后将其全部打印出来,而不是逐行打印。我将如何去做这件事。

最佳答案

您将需要一些方法来缓冲用户的输入(因为他们可能会在按下 Ctrl+D 之前打出一整本小说)。

这是一个你可以如何做的例子(注意一个字符一个字符地读取是非常慢的,并且使用 printf 不会处理嵌入的 NUL,所以你可能想要使用 读取写入 而不是“真实”代码):

size_t bufsize = 1024; // starting size
char *buf = malloc(bufsize);
off_t i = 0;
char c;

while((c = getc(stdin)) != EOF) {
    buf[i++] = c;
    if(i == bufsize) {
        bufsize *= 2; // double buffer size to avoid constant reallocation
        buf = realloc(buf, bufsize);
        if(!buf) {
            fprintf(stderr, "YOU TYPED TOO MUCH\n");
            exit(-1);
        }
    }
}

buf[i++] = 0;
printf("%s", buf);

关于c - 使用标准输入时等待 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14793050/

相关文章:

c++ - 如何将ASCII和BINARY数据同时写入同一个文件

python - 为什么这个 numpy 数组太大而无法加载?

c - 为什么这段代码运行时会崩溃?

c - 尝试进行从 char 到 int 指针的类型转换时违反 MISRA C-2012 规则 11.3

c - fread 跳过前 8 个字符

c++ - "File could not be opened."C++ fstream

c - Linux 交叉编译库

c - 为什么在 MacOS Sierra 上的 C 语言中,该程序会更改数组的整数值?

c++ - OpenMP:并行运行两个函数,每个函数占线程池的一半

file-io - 使用 Inno Setup 如何重命名用户选择的文件(图像)并将其复制到程序文件目录