fscanf()具有不同的输入?

时间:2013-11-04 02:20:55

标签: c

我是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.

我该如何解释?

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;
    }
}