我是c的新程序员,需要一些帮助。我正在尝试读取包含以','分隔的数字(长双打)的文本文件。我的问题是我不知道每行的大小是什么,我在网上找到的每个解决方案都假设它的大小。这是我要做的工作的一部分,我不能使用scanf / fscanf。最后我想有数组包含数字(没有','),最好的方法是什么? 非常感谢!
编辑:
FILE *inputFile;
inputFile = fopen("C:\\Users\\studies\\C\\Exe1\\input_example.txt",
"r");
for (int c = 0; c < 7; c++) {
fscanf(inputFile, "%Lf,", ¶ms[c]);
}
我尝试阅读的任何其他方式都没有顺利,fgets,getchar等。
答案 0 :(得分:1)
分而治之!看看您是否能够正确读取文件而不存储任何内容。只需阅读并打印您阅读的内容,即可将输出与输入文件进行比较。如果匹配,您就可以了。
比您想象的更容易阅读文件。使用char数组作为每个数字的临时缓冲区,并将文件字符读入缓冲区。如果输入是&#39;,&#39;那你读完了一个完整的数字。同样适用于换行符&#39; \ n&#39;。
// untested snippet
char buf[1024]; // Make it big
size_t i = 0;
int c;
long double d;
while ((c = fgetc(fp)) != EOF) {
if (c == ',' || c == '\n') {
buf[i] = '\0';
d = strtold(buf);
printf("%lf%c", d, c); // debugging, sanity check
i = 0;
}
else
buf[i++] = c;
}
可能存在片段未覆盖的未覆盖的角落案例,例如在文件末尾缺少换行符,或者愚蠢的Windows \ r \ n组合。此外,字符串到双转换需要正确的错误检查。不过,片段应该让你去。