2011-04-18 113 views
3

我一直在努力弄清楚fscanf格式。我只想閱讀由空格分隔的單詞文件。我想放棄包含非字母字符的任何字符串。如何閱讀只包含字母與fscanf的字符串?

char temp_text[100]; 
while(fscanf(fcorpus, "%101[a-zA-Z]s", temp_text) == 1) { 
    printf("%s\n", temp_text); 
} 

我試過上面的代碼都有和沒有's'。我在另一個stackoverflow線程中讀到,s使用時會被解釋爲文字's'而不是字符串。無論哪種方式 - 當我包括s和當我不包含s - 我只能從我正在閱讀的文件中打印出第一個單詞。

回答

2

%[掃描說明符不會跳過前導空格。您可以在它之前或末尾添加一個空格來代替您的s。你也有你的100和101倒退,因此一個嚴重的緩衝區溢出錯誤。

+0

感謝兩個更正!我改變了寬度參數,並在']'之後添加了一個空格來代替s,現在一切都很順利:-)作爲一個更一般的問題,最好是隻在使用類型說明符時才服務於您想要的確切目的?你有沒有發現自己使用類型說明符結合修飾符? – 2011-04-18 02:31:01

+1

我發現自己很少使用'scanf'系列函數。每當我嘗試使用它們時,我都會遇到輕微的偏離,我試圖讓這種行爲難以或不可能解決。通常'fgets'甚至'fgetc'最後都變得更易於使用。 – 2011-04-18 02:35:01

1

s不需要。

這裏有一些事情要嘗試:

打印出從的fscanf返回值,並確保它是1

使用龜etc,以確保在的fscanf消耗空白獲得下一個字符並將其打印出來。

+0

編輯格式化 – 2011-04-18 01:09:18

+0

啊。你幫我發現了R.正在打的什麼,下一個空間沒有被讀取。謝謝! – 2011-04-18 02:33:21

相關問題