如何读取.csv文件并将其保存到二维数组中?
我对C编程非常陌生,我已经被设定了读取包含2d整数数组的.csv文件的任务,然后我需要打印它,以便它显示在终端上。数组是一个4行乘2列的整数数组,但是当我使用这段代码时,我会得到一个随机的数字列表。我已经附上了我使用的代码和.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
#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++;
}