繁体   English   中英

fscanf()具有不同的输入?

[英]fscanf() with varying inputs?

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

我该如何解决?

您应该阅读整行,并使用strtok获取行上的单词。

编辑:有关使用strtok_r而不是strtok的好处,请参见评论讨论。

您可以使用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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM