2010-10-17 70 views
0

与fscanf()函数的一个问题 - 它不会跳到下一个字从文件fscanf() - 如何在读取n个字符后跳到下一个单词?

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

如果发现超过10个字符的话,它会读取10个字符阅读10个字符后,将它们存储到str中,然后继续读取最多10个字符的同一个单词。

我该如何指定最多读取10个字符并跳到下一个单词?
是否有替代方案?

谢谢!

回答

0

我已经找到了解决方案为您提供:

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

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

3

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

+0

事实上,它不仅“fscanf()”不能解决所有问题,还会产生问题。 – 2010-10-17 23:36:45

1

您将不得不继续扫描或调用fgetc到该循环体内的丢弃缓冲区,直到该流已经消耗了该字中剩余的所有非空白字符。

fscanf只是在下一个单词中扫描多达10个字符,并将文件指针留在所读取内容的末尾,在下一次调用时它将从10个字符开始,并且知道这不是一个单词的开始,所以它会把下一个10个字作为一个单词...

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

相关问题