【发布时间】:2020-09-18 07:33:58
【问题描述】:
目前我正在做一个实际的工作来拼贴我必须从文件中读取数据。
文件数据结构为:“id name sex”
示例:
nm0025630 维卡斯·阿南德 M nm0418131 维克多·詹森 M nm0411451 迪克以色列 M nm0757820 莱奥波尔多·萨尔塞多 M要阅读当前我正在使用的代码:
fh = NULL;
fh = fopen(ACTORS, "r");
if (!fh) {
exit(1);
}
while (!feof(fh)) {
char sex, name[100], id[10];
fgets(id, 10, fh);
fgets(name, 100, fh);
fgetc(sex);
if (!feof(fh)) {
hash_update_node(hash, get_id_num(id), name, sex);
count++;
}
}
问题在于它会同时读取名称和性别。 任何帮助表示赞赏。
【问题讨论】:
-
那是因为你给了它100个字节的空间,所以当它找到行尾时它会停止。由于名称可以具有可变大小,并且如果您的项目允许,请在每行中的数据项之间使用分隔符,例如制表符或逗号或其他字符,一次将整行读取到足够大的缓冲区中,然后使用
strtok拆分行的每个字段。 -
你不必使用 fgets()。您可以使用 fscanf() 并使用转换说明符来限制和确定您正在阅读哪些数据
-
我不能使用 fscanf() 因为单词的数量并不总是相同的。有的用一个词,有的用4个。
-
fgetc(sex)不正确。应该是:sex = fgetc(fh)。您应该注意编译器给您的警告。另请注意,while (!feof(fh))is not good. -
@Mabs2001 所以使用
fgets读取 100 然后性别将是其中的最后一个字符(没有单独读取它),并从名称中删除最后一个字符和空格之前