我是C的新手,我正在尝试使用fscanf
从不同长度的文件行读取
可以从文件中读取3条不同的行,即:
string
string char
string char char
我有这个:
char elem1;
char elem2;
char *str;
while(fscanf(file, %s%c%c, str, &elem1, &elem2) == 3) {
...do stuff
}
很明显,当我获得所有3个预期参数时,这很好,但是如果该行只包含一个字符串,则下一行中字符串的前两个字符将分配给elem1和2.
我该如何解释?
答案 0 :(得分:3)
您应该阅读整行并使用strtok
来获取该行中的文字。
修改:有关使用strtok_r
代替strtok
的好处,请参阅评论讨论。
答案 1 :(得分:2)
您可以使用fgets
一次读取一行,然后sscanf
只查看该行中的1,2或3项。
char elem1; char elem2; char str[1000]; char line[1000];
while(fgets(line, 1000, file) != NULL) {
switch(sscanf(line, "%s %c %c", str, &elem1, &elem2)) {
case 3: /* str, elem1, elem2 are valid */
break;
case 2: /* str and elem1 are valid */
break;
case 1: /* str is valid */
break;
}
}