2010-10-17 72 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您可能想要做的事情。

相關問題