0

所以我正在做一些事情,要求我让用户在命令窗口中输入尽可能多的内容,包括新行,然后在他们按下 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 修改他们给我的输入。

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

4

2 回答 2

3

您将需要某种方式来缓冲用户的输入(因为他们可能会在点击Ctrl+之前输入整本小说D)。

下面是一个示例,说明您可以如何做到这一点(请注意,逐个字符读取非常慢,并且 usingprintf不会处理嵌入式 NUL,因此您可能希望在“真实”代码中使用readandwrite代替):

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);
于 2013-02-10T00:10:52.247 回答
0

你看过使用 termios 吗?(termios.h) 您可以将标准输入设置为非规范和非回显模式,这将让您捕捉到每个按下的键,包括控制字符

http://www.gnu.org/software/libc/manual/html_node/Noncanon-Example.html

于 2013-02-10T00:05:20.577 回答