如何读取.csv文件并将其保存到二维数组中?

如何读取.csv文件并将其保存到二维数组中?,c,file-io,C,File Io,我对C编程非常陌生,我已经被设定了读取包含2d整数数组的.csv文件的任务,然后我需要打印它,以便它显示在终端上。数组是一个4行乘2列的整数数组,但是当我使用这段代码时,我会得到一个随机的数字列表。我已经附上了我使用的代码和.csv文件数组,以及它的外观 #include <stdlib.h> #include <stdio.h> int main() { FILE *in_data = fopen("in.csv", "r&quo

我对C编程非常陌生,我已经被设定了读取包含2d整数数组的.csv文件的任务,然后我需要打印它,以便它显示在终端上。数组是一个4行乘2列的整数数组,但是当我使用这段代码时,我会得到一个随机的数字列表。我已经附上了我使用的代码和.csv文件数组,以及它的外观

#include <stdlib.h>
#include <stdio.h>

int main()
{
    FILE *in_data = fopen("in.csv", "r");
    
    int i;
    int j;
    int trIn[4][2];
    if(in_data == NULL)
    {
        printf("error\n");
        return 1;
    }
    for(i = 0; i < 4; i++){
    for(j = 0; j < 2; j++){
        char junk;

        if (j != 0) fgetc(in_data);

        fscanf(in_data, "%c%d%c", &junk, &trIn[i][j], &junk);
        printf("%d ", trIn[i][j]);
    }
    fgetc(in_data);
    printf("\n");
    }
return 0;
}
    
.csv文件(原始):


您可以将当前回路替换为以下回路:

(i=0;i<4;i++)的
{
对于(j=0;j<2;j++){
煤焦垃圾;
如果(j!=0)fgetc(in_数据);
fscanf(在_数据中,“%c%d%c”、&junk、&trIn[i][j]、&junk);
printf(“%d”,trIn[i][j]);
}
fgetc(内部数据);
printf(“\n”);
}
这是因为
fscanf(in_data,“%d”和&trIn[i][j])
从in_data文件
中读取一个int(
%d
)到
trIn[i][j]的内存位置
fgetc
不起作用,因为它只读取单个字符,然后将其打印为一个整数

编辑:现在,对于.csv文件中的每个值,将
\n
字符读入垃圾变量

逐行:

如果(j!=0)fgetc(in_data)
将csv文件中的
读取到垃圾变量中(该变量不是行中的第一个字符)

fscanf(在_数据中,“%c%d%c”、&junk、&trIn[i][j]、&junk);
内容如下:

  • 第一:将开头的
    字符转换为垃圾变量
  • 第二:将数字(int:
    %d
    )放入
    trIn[i][j]
    的内存位置
  • 第三:将关闭的
    字符转换为垃圾变量

您可以创建一个模式来丢弃不需要的字符,如下所示:


你能给出原始的.csv文件数据吗?请注意,
fgetc
一次解析一个字符,包括空格和换行符。谢谢,最后一个问题:这些数字总是一个字符吗?@xmxn我添加了另一个方法,如果它不起作用,你的文件就有严重的问题。可能无法打印字符rsed.
fgets()
,然后是
sscanf()
(或者使用一对指针和
strtol()
)始终是解决问题的方法。@DavidC.Rankin,这是肯定的。评论不用于扩展讨论;这段对话已经结束。
0 0
0 1
1 0
1 1
"0","0"
"0","1"
"1","0"
"1","1"
for (i = 0; i < 4; i++)
{
    for (j = 0; j < 2; j++)
    {
        //printf("%s", str); //print str to check if there are any weird chars
        fscanf(in_data, " \"%d\",", &trIn[i][j]);
        printf("%d ", trIn[i][j]);
    }
    printf("\n");
}
char str[20];
int i = 0;
int j = 0;

//...

while (i < 4 && fgets(str, sizeof str, in_data))
{
    //printf("%s", str); //print str to check if there are any weird chars
    if(sscanf(str, "\"%d\",\"%d\"", &trIn[i][j], &trIn[i][j+1]) == 2)
        printf("%d %d\n", trIn[i][j], trIn[i][j+1]);
    i++;
}