在你删除它之前,我还没有在任何线程中看到过这种情况。我见过有人想跳过行,但它失败了,或者如果有用户输入,它就会失败(这是由于stdlibc中奇怪的输入缓冲区.但不是fgets
完全不工作的情况)
所以,我需要帮助,或者有人告诉我,代码的工作,我需要重新安装我的PC上的一切或东西。
一开始,我只是想快速编写一个CSV -> 2D float
数组程序在C中.只是因为它会更整洁,然后手动输入一个数组在main
.所以,试图寻找已经制作的代码.找不到它.试图使它自己从头开始.应该不会太糟糕,我想.我已经做过类似的事情.
但都不管用我试过了。
我最初尝试将整个文件fread
放入一个char *
数组中,但也没有成功。
当我使用%d
打印时,我得到了整个数组(除了换行符,即字符代码10,即使在二进制模式下阅读时也没有出现),我需要在char数组中使用'\n'
,以将split("\n")
放入不同的行,但嘿,我想这就是生活)
为了进一步增加我的困惑,当我使用%c
或%s
打印时,我只得到了最后一行。
所以看到fread
不起作用,我又试了一次,用了fgets
。用了很多代码,直到我把它简化到最基本的情况,它仍然不起作用。
这是一个非常奇怪的问题。要么我错过了一些东西,我太累了,看不到它,或者C编译器更新了一个错误。在网上寻找并尝试了几个小时后,我没有找到关于这个的任何帖子。这很奇怪,因为fgets
曾经在以前的项目上工作。我尝试重新启动我的PC,甚至编译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|
型
2条答案
按热度按时间0sgqnhkj1#
解决方法:代码没有问题
这是因为我想安全,并从Excel创建了一个CSV文件,并保存为CSV。然而,我missclicked Mac CSV选项,而不是Windows CSV选项。
因此,当在Windows或Linux上编译时,换行符是不同的字符,不会被捕获。
故事的寓意:下次用文本编辑器手动编写CSV。
6jygbczu2#
嗯,我觉得这是因为lineSize > 1 line..
fgets不是应该在换行符处停止吗?
新评论:在Linux中创建的文件,在linux(Windows Ubuntu子系统)中编译和运行的代码。这是以前的代码,我只是没有进一步剥离它。
字符串
csv(在Linux中创建)
型
输出(在Linux中编译和运行)
型
但是对于在Windows中创建的文件,它仍然不能工作。除了“Windows坏”还有什么解决方案吗?我不想每次做C代码时都使用我的Linux子系统。
新编辑:如果csv是在Linux中创建的,那么在windows中运行时,代码确实可以工作
最后编辑:这是由于一个mac的CSV编码。看到我的其他答案。谢谢大家