首页 > 解决方案 > 为什么 sscanf() 不将 CSV 文件中的行读入数组?

问题描述

我正在尝试将 CSV 文件中的整数读入二维数组。

这是我的代码...

FILE* fp = fopen(argv[1], "r");
int counter = 0;
char line[50];
while (fgets(line, 50, fp)) {
    counter++;
}
int arry[counter - 1][4];
NUM_ROWS = counter -1;
counter = 0;

//Iterate File Again to Populate 2D Array of PID, Arrival Time, Burst Time, Priority
//File in Format: #,#,#,# 
rewind(fp);
//Skip First Line of Var Names
fgets(line, 50, fp);
while(fgets(line, 50, fp)) {
    sscanf(line, "%d%d%d%d", &arry[counter][0], &arry[counter][1], &arry[counter][2], &arry[counter][3]);
    counter++;
}

但是, sscanf() 不会将该行读入数组。我不确定为什么这不起作用

编辑:这是文件的图片。

标签: arraysccsvinput

解决方案


  1. 您需要具有scanf反映扫描行格式的格式字符串。
  2. 经常检查结果scanf

例子:

int main(void)
{
    char line[] = "34543,78765,34566,35456";
    int arry[1][4];
    int counter = 0;

    int result = sscanf(line, "%d,%d,%d,%d", &arry[counter][0], &arry[counter][1], &arry[counter][2], &arry[counter][3]);
    
    printf("result = %d\n", result);
    printf("CSV line = `%s`\n", line);
    printf("data read: %d, %d, %d, %d\n", arry[counter][0], arry[counter][1], arry[counter][2], arry[counter][3]);
}  

https://godbolt.org/z/zs5Y8ff8h


推荐阅读