C语言编程。使用fopen fclose进行文本文件操作

C语言编程。使用fopen fclose进行文本文件操作,c,fopen,fclose,C,Fopen,Fclose,我正在打开一个文本文件,并处理单词计数函数来计算单词数,然后关闭一个文件。 接下来,我再次打开同一个文件,并将其存储在数组中,限制为数组中的字数 在这里,如果我像第1行和第16行一样只使用一次fopen和fclose,我的程序就不能工作。但如果我打开它(第1行)处理它,然后关闭它(第10行)并再次打开它(第12行)进行第二个处理,我的程序工作。这是否意味着fopen一次只能处理一个进程,而我必须再次打开它进行第二个进程 1. fptrr = fopen(fname,"r"); // open t

我正在打开一个文本文件,并处理单词计数函数来计算单词数,然后关闭一个文件。 接下来,我再次打开同一个文件,并将其存储在数组中,限制为数组中的字数

在这里,如果我像第1行和第16行一样只使用一次fopen和fclose,我的程序就不能工作。但如果我打开它(第1行)处理它,然后关闭它(第10行)并再次打开它(第12行)进行第二个处理,我的程序工作。这是否意味着fopen一次只能处理一个进程,而我必须再次打开它进行第二个进程

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);
1。fptrr=fopen(fname,“r”);//以读取模式打开文本文件
2.
3.if(fptrr==NULL){//if文件名不匹配
4.printf(“错误:没有此类文件或目录”);
5.返回-1;
6.     }
7.
8.wordCount+=countWords(fptrr)//运行单词计数函数并获取单词总数的值
9
10fclose(fptrr);//关闭文件
11
12fptrr=fopen(fname,“r”);

13对于(int i=0;i文件打开时,可以对其执行任何操作

我怀疑您的问题是,您在一组操作中读取到了文件的末尾,然后在末尾尝试再次读取文件。查找函数

要倒带到文件的开头,只需在第一个countwords之后调用
rewind(fptrr);
。或者,您可以调用
fseek(fptrr,0L,SEEK_SET)
,但倒带()更清晰


请注意,关闭并重新打开文件会自动将文件重置为从开始读取,这就是新版本工作的原因。

打开文件时,您可以对其执行任何操作

我怀疑您的问题是,您在一组操作中读取到了文件的末尾,然后在末尾尝试再次读取文件。查找函数

要倒带到文件的开头,只需在第一个countwords之后调用
rewind(fptrr);
。或者,您可以调用
fseek(fptrr,0L,SEEK_SET)
,但倒带()更清晰


请注意,关闭并重新打开文件会自动将文件重置为从开始读取,这就是新版本工作的原因。

countWords()的定义在哪里
?在第一次阅读该文件后,您应该使用
fseek
返回文件的开头再次处理它。您关于fopen只处理一个进程的问题,我感到非常困惑。您能澄清吗?或者使用@BLUEPIXY谢谢,它现在可以工作了。
countWords()的定义在哪里
?在第一次阅读文件后,您应该使用
fseek
返回到文件的开头再次处理它。您关于fopen只处理一个进程的问题,我觉得非常困惑。您能澄清吗?或者使用@BLUEPIXY谢谢,它现在可以工作了。