【发布时间】:2011-10-10 19:29:03
【问题描述】:
大家好,我想问一下,在 c 编程中有没有一种方法可以从标准输入读取多行输入
因为我不能使用 scanf() 也不是 fgets,因为它需要输入直到 /n
还有如何像一些分隔符一样停止输入
非常感谢
我也没有使用 c++
【问题讨论】:
大家好,我想问一下,在 c 编程中有没有一种方法可以从标准输入读取多行输入
因为我不能使用 scanf() 也不是 fgets,因为它需要输入直到 /n
还有如何像一些分隔符一样停止输入
非常感谢
我也没有使用 c++
【问题讨论】:
使用fread。
例如,从链接复制
#include <stdio.h>
...
size_t bytes_read;
char buf[100];
FILE *fp;
...
bytes_read = fread(buf, sizeof(buf), 1, fp);
...
【讨论】:
fread 将无法正常工作。
fread(和fwrite)编写文件复制程序非常容易。这样的程序复制单字节文件以及几兆字节的文件。
getc)被我投票赞成。
我建议您使用getc 一次读取一个输入字符,查找所需的任何分隔符,并将非分隔符字符附加到您手动控制大小的缓冲区(使用realloc)。另一种方法是使用fread 读取大块并扫描分隔符,但getc 方法可能更容易和更简单。
确保查找EOF 以及您的显式分隔符。
【讨论】:
如果 C 中有适当的字符串数据类型,并且具有自动内存管理功能,那么这项任务将非常简单。这个想法是:
string s = str_new();
const char *delimiter = "EOF\n";
while (true) {
int c = fgetc(f);
if (c == EOF) {
break;
}
str_appendc(s, c);
if (str_endswith(s, delimiter)) {
str_setlen(s, str_len(s) - strlen(delimiter));
break;
}
}
您只需为字符串处理编写适当的函数。
【讨论】: