在您删除它之前,我还没有在任何线程中看到此内容。我见过有人想要跳过行但失败了,或者如果有用户输入则失败(这是由于 stdlibc 中奇怪的输入缓冲区......但不是 fgets 完全不起作用的情况)
所以,我需要帮助,或者有人告诉我该代码可以工作,并且我需要在我的电脑上重新安装所有内容或其他东西。
一开始,我只是想用 C 语言快速编写一个 CSV -> 2D 浮点数组程序。 只是因为它比在 main 中手动输入数组更整洁。因此,尝试寻找已经制作的代码。找不到它。尝试从头开始自己制作。我想应该不会太糟糕。我已经做过类似的事情了。
但没有任何效果。这是我尝试过的。
我最初尝试将整个文件读取到单个 char * 数组中。 也没有用。
当我打印'%d'时,我得到了整个数组(除了换行符,ascii代码10,即使在二进制模式下读取也没有出现)我需要' ' 在要分割的 char 数组中(" ”)分成不同的行,但是嘿,我想这就是生活)
更让我困惑的是,当我打印“%c”或“%s”时,我只得到了最后一行。
所以看到 fread 不起作用,我用 fgets 再次尝试。 使用了大量代码,直到我将其简化为最基本的情况,但它仍然不起作用。
这是一个非常奇怪的问题。要么是我遗漏了一些东西,而我太累了而看不到它,要么是 C 编译器因错误而更新。 在网上查找并尝试了几个小时后,我没有找到任何关于此的帖子。这很奇怪,因为 fgets 曾经在以前的项目中工作过。我尝试重新启动我的电脑,甚至为 Linux 和 Windows 进行编译。两者都不起作用。
这是 csv 文件内容。
2D_data.csv:
0.1,0.2,0.3
1.1,2.2,3.3
这是代码。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
void readCSV(char *filename, int lineSize)
{
FILE *filePointer = fopen(filename, "rb");
char line[lineSize];
fgets(line, lineSize, filePointer);
printf("%s|\n", line);
}
void main()
{
printf("\n\n------------START OF PROGRAM------------\n\n");
readCSV("2D_data.csv",128);
}
我得到输出:
1.1,2.2,3.3|
当它应该是文件的第一行时
0.1,0.2,0.3|
嗯,我好像是因为 lineSize > 1 行... 尽管如此,你如何获得一个足够大的缓冲区来容纳任何行而不是 换行溢出?
fgets 不是应该在换行符处停止吗?