【发布时间】:2018-03-04 13:39:50
【问题描述】:
例如考虑以下代码 -
fscanf(fp,"%d:%d:%[^:]:%[^\n]\n",&pow->no,&pow->seen,pow->word,pow->means);
printf("\ntthis is what i read--\n%d:%d:%s:%s:\n",pow->no,pow->seen,pow->word,pow->means);
这里 pow 是指向之前声明的对象的指针,
当我将s 放入fscanf(fp,"%d:%d:%[^:]s:%[^\n]\n" 时,第三个被读取但不是最后一个
输出是——
4:0:Abridge::
但是当我做fscanf(fp,"%d:%d:%[^:]:%[^\n]s\n" 时,所有内容都被读取了
输出是——
4:0:Abridge:To condense:
AND 没有 s 任何地方 fscanf(fp,"%d:%d:%[^:]:%[^\n]\n" 都被读取
输出是——
`4:0:Abridge: 浓缩:
为什么??
【问题讨论】:
-
不清楚你的意思。
-
请从您的文本文件中显示输入行的样子。
-
为什么 s 在阅读时会失败:之后?你能详细说明一下吗
-
@STG 如果
s出现在格式字符串中,并且由于它不是格式说明符 的一部分,那么scanf()将尝试匹配s文字。但是因为它不存在于扫描的字符串中,所以它当然会失败。与':'字符发生的情况相同,它在格式中是必需的,因为它存在于输入中,在扫描完非常令牌之后,scanf()将首先尝试查找紧随其后且位于下一个格式说明符之前的文本. -
知道了,因为下一个输入直到 \n 被读取但没有存储在任何地方,当我再次尝试使用 [^\n] 读取时它什么也没存储,谢谢