有很多方法可以做到這一點。
簡單的方法
一個簡單的辦法是循環的文字閱讀:
f = fopen("words.txt","r"); // attention !! open in "r" mode !!
...
int rc;
do {
rc=fscanf(f, "%99s", string1); // attempt to read
} while (rc==1 && !feof(f)); // while it's successfull.
... // here string1 contains the last successfull string read
但是這需要一個字由空格分隔字符的任意組合。請注意使用scanf()
格式中的with,以確保不會發生緩衝區溢出。
rc=read_word(f, string1, 100);
:
更精確的方式
建立在以前的嘗試,如果你想的話更嚴格的定義,你可以用自己的函數調用替換到的scanf()
該功能類似於:
int read_word(FILE *fp, char *s, int szmax) {
int started=0, c;
while ((c=fgetc(fp))!=EOF && szmax>1) {
if (isalpha(c)) { // copy only alphabetic chars to sring
started=1;
*s++=c;
szmax--;
}
else if (started) // first char after the alphabetics
break; // will end the word.
}
if (started)
*s=0; // if we have found a word, we end it.
return started;
}
可能是最好的方法,尤其是如果您的文件很大。如果你的「單詞」比文件的末尾大,那麼可能會發生麻煩。 –
是的,確切地說。搜索繼續,直到找到該單詞。 – fluter
好方法!但是,在文本模式下讀取文件末尾是不可移植的:標準中寫明「7.21.9.2:*對於文本流,任一偏移量應爲零,或者偏移量應爲先前成功調用函數返回的值函數在與同一個文件相關的數據流上,因此應該是SEEK_SET。*「 - 另見:http://www.cplusplus.com/reference/cstdio/fseek/ – Christophe