[英]Why doesn't fscanf convert set and then char?
如果文件foobar.txt
包含文本foobar
,则在以下代码中
char s[16], c;
fp = fopen("foobar.txt", "r");
fscanf(fp, "%[f]s%c", s, &c);
fscanf
返回1而不是2。
而如果我将调用拆分为fscanf
:
fscanf(fp, "%[f]s", s);
fscanf(fp, "%c", &c);
然后两个都按预期返回1。
为什么单个fscanf
不起作用?
因为s
不应该在那里,所以应该
fscanf("%[f]%c", s, &c);
当scanf()
以格式而不是输入形式找到s
,它将停止并返回1
因为直到1个参数都匹配为止。
关键是, s
不是格式的一部分, []
是格式说明符,它仅包含单个字符f
,因此您应更仔细地阅读文档,并可以确认s
不需要格式说明符,实际上fscanf()
会将其视为请求的输入的一部分,但它不存在,因为f
后面有一个o
,请尝试fsobar
。
在第二种情况下,它也停止并且不占用f
之后的任何字符,然后第二次调用消耗单个字符,因此两者均正确返回1
。
只需删除s
并对其进行如下修改。
fscanf("%[f]%c", s, &c);
在第一种情况下,当fscanf()
在输入中找不到s
时,它将停止并返回1。在第二种情况下,如您所述,很明显fscanf()
将返回1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.