1

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

我该如何解释呢?

4

2 回答 2

3

您应该阅读整行和使用strtok以获取该行的单词。

编辑:请参阅评论讨论以了解使用strtok_r而不是strtok.

于 2013-11-04T02:22:39.083 回答
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;
    }
}
于 2013-11-04T02:31:36.977 回答