C - Fgets 在使用最基本的情况下会随机跳行

问题描述 投票:0回答:1

在您删除它之前,我还没有在任何线程中看到此内容。我见过有人想要跳过行但失败了,或者如果有用户输入则失败(这是由于 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|
c csv multidimensional-array file-read
1个回答
0
投票

嗯,我好像是因为 lineSize > 1 行... 尽管如此,你如何获得一个足够大的缓冲区来容纳任何行而不是 换行溢出?

fgets 不是应该在换行符处停止吗?

© www.soinside.com 2019 - 2024. All rights reserved.