2017-10-27 9 views
0

私はテキストファイルを開き、ワード数をカウントしてファイルを閉じるためにワードカウント関数を処理しています。 次に、同じファイルを再度開いて、配列内のワード数の制限値を持つ配列に格納します。Cプログラミング。テキストファイル操作のためのfopen fcloseの使用

ここで、1行目と16行目のようにfopenとfcloseを1回だけ使用すると、プログラムが機能しません。しかし、私がそれを開いて(1行目)、それを閉じて(10行目)、もう一度開くと(12行目)、2行目のプロセスでプログラムが動作します。 fopenは一度に1つのプロセスしか処理できないので、2回目のプロセスで再び開く必要がありますか?

1. fptrr = fopen(fname,"r"); // open the text file in read mode 
2. 
3. if (fptrr == NULL) {//if file name does not match 
4.  printf("Error: No such file or directory"); 
5.  return -1; 
6.  } 
7. 
8. wordCount += countWords(fptrr); //run word count function and get the value of total words 
9. 
10. fclose(fptrr); // close the file 
11. 
12. fptrr = fopen(fname,"r"); 
13. for(int i=0;i<wordCount;i++){ // define size of loop equal to words in a file 
14. fscanf(fptrr, "%s", fileArray[i]); //scan and store in array 
15. } 
16. fclose(fptrr); 
+0

「countWords()」の定義はどこですか? – Steve

+3

初めてファイルを読み終えたら、 'fseek'を使ってファイルの先頭に戻り、再度処理する必要があります。 1つのプロセスだけを処理するfopenについてのあなたの質問は、私は非常に混乱していることがわかります。明確にできますか? – AntonH

+3

[rewind](http://en.cppreference.com/w/c/io/rewind)を使用してください。 – BLUEPIXY

答えて

5

ファイルが開いている間は、そのファイルに任意の操作を実行できます。

問題の原因は、1つの操作セットでファイルの最後まで読み込んでいて、最後にファイルをもう一度読み込もうとしていることです。 rewind()ファンクションを探します

ファイルの先頭に巻き戻すには、最初のカウントワードの後に​​rewind(fptrr);を呼び出します。代わりにfseek(fptrr, 0L, SEEK_SET)に電話することもできますが、rewind()はより明確です。

ファイルを閉じてから再度開くと、自動的にファイルがリセットされ、新しいバージョンが動作する理由がわかります。

+0

ありがとう、それは今動作します。 – SONI

関連する問題