[英]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.