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