fscanf() - 如何在读取n个字符后跳到下一个单词?

时间:2010-10-17 23:07:55

标签: c

fscanf()出现问题 - 从文件中读取10个字符后,它不会跳到下一个单词

while(fscanf(TEXT_FILE,"%10s", str) != EOF) // reads up to 10 char into str  

如果找到大于10个字符的单词,它将读取10个字符,将它们存储到str中,继续读取最多10个字符的同一个单词。

我如何指定读取最多10个字符并跳到下一个字?
还有其他选择吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

您最好使用fgets()strtok(),或者在fgetc()周围编写一个小循环来做您想做的事情。 fscanf()很灵活,但并不能解决所有问题。

答案 1 :(得分:1)

您必须继续扫描或调用fgetc到该循环体内的一个抛弃缓冲区,直到该流消耗了该字中剩余的所有非空白字符。

fscanf只扫描下一个单词中最多10个字符,并将文件指针留在它读取的结尾处,在下一次调用时它将从10个字符开始到字符串中并且知道这个这不是一个单词的开头所以它会将接下来的10个字符视为一个单词......

请参阅strtok了解您可能想要做的事情。

答案 2 :(得分:0)

我找到了一个解决方案:

while(fscanf(file, "%10s%*s", str) != EOF)

它适用于VS 2008.我不确定它是否是标准的,如果你的编译器支持与否。 %*s部分将跳过当前字符串(如果长度大于10)到下一个空白字符,并将消耗所有空白字符。