【发布时间】:2014-06-18 10:44:47
【问题描述】:
我正在尝试学习如何从文本文件中的制表符分隔字段导入数据。这是我试图从名为users.in 的外部文件中获取的示例:
1 joshmith mypwd John Smith Awesome Road 103
2 jane_doe strongpwd Jane Doe Lucky Street 201
3 august84 goodpwd August May Red Boulevard 24
这里是应该保存数据的结构...
typedef struct User
{
int id;
char username[20];
char password[40];
char firstname[20];
char lastname[20];
char address[120];
} User;
...当然还有应该处理该操作的代码:
User *u = (User *)malloc(sizeof(User)*4);
int i = 0;
while (6 == fscanf(data_file, "%d\t%[^\t]\t%[^\t]\t%[^\t]\t%[^\t]\t%[^\t]\n", &(u+i)->id, (u+i)->username, (u+i)->password, (u+i)->firstname, (u+i)->lastname, (u+i)->address))
{
fprintf(stdout, "%d %s %s %s %s %s\n", (u+i)->id, (u+i)->username, (u+i)->password, (u+i)->firstname, (u+i)->lastname, (u+i)->address);
i++;
}
循环设法通过第一次迭代......然后它停止了。这是输出:
1 joshmith mypwd John Smith Awesome Road 103
2
谁能帮我弄清楚为什么会这样?导入此类格式化数据的正确方法是什么?
【问题讨论】:
-
@user3121023 是的!谢谢你!为什么格式化字符串开头有多余的空格?那是为了什么?
-
%d本身不应该已经丢弃前面的空格吗?