【发布时间】:2013-09-15 05:41:45
【问题描述】:
我正在尝试编写一段简单的代码来从 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,整数部分,然后是,,然后它必须读取一个细绳。,在字符串中有效,因此它会一直读取到行尾(直到那时没有空格),直到第一个逗号……其余部分保持为空。 (From this answer) -
您在帖子中有一个 firstN 和一个 firstName - 是哪个?你也可以发布结构吗?
-
更正了变量名并添加了结构体