我正在尝试编写一段简单的代码,将CSV文件中的值读取到一个包含最多100个条目的结构体数组中。
CSV文件中的一行示例:
1,Mr,James,Quigley,Director,200000,0
我使用以下代码读取这些值,但当我打印出这些值时,它们是不正确的。
for(i = 0; i < 3; i++) /*just assuming number of entries here to demonstrate problem*/
{
fscanf(f, "%d,%s,%s,%s,%s,%d,%d", &inArray[i].ID, inArray[i].salutation, inArray[i].firstName, inArray[i].surName, inArray[i].position, &inArray[i].sal, &inArray[i].deleted);
}
当我打印第一个名字时,所有的值都被分配给了第一个名字:
for(j = 0; j < 3; j++) /* test by printing values*/
{
printf("Employee name is %s\n", inArray[j].firstName);
}
以这种方式提供ames,Quigley,Director,200000,0
等内容。我确定这是我的格式化fscanf行的方式,但我无法使其工作。
这是我正在读取的结构:
typedef struct Employee
{
int ID;
char salutation[4];
char firstName[21];
char surName[31];
char position[16];
int sal;
int deleted;
} Employee;
%s
是贪婪的,我认为它会读取整个单词... 它会先找到%d
,即整数部分,然后是逗号,
,之后必须读取字符串。,
在字符串中是有效的,所以它会一直读取直到行末(此时没有空格),而不是第一个逗号...剩余的部分则为空。(引用自这篇答案) - ppeterka