2017-10-27 9 views
0

나는 텍스트 파일을 열고 단어 수를 계산하고 파일을 닫는 단어 수 계산 기능을 사용하고 있습니다. 다음에는 동일한 파일을 다시 열어 배열의 단어 개수 제한 값이있는 배열에 저장합니다.C 프로그래밍. 텍스트 파일 작업을 위해 fopen fclose 사용하기

여기서 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); 
+0

여기서'countWords() '의 정의는 무엇입니까? – Steve

+3

파일을 처음으로 읽은 후에는 다시 파일을 처리하기 위해 파일의 처음으로 돌아가려면'fseek'를 사용해야합니다. 한 프로세스 만 처리하는 fopen에 관한 질문은 매우 혼란 스럽습니다. 명확히 해 주시겠습니까? – AntonH

+3

또는 [되감기] (http://en.cppreference.com/w/c/io/rewind)를 사용하십시오. – BLUEPIXY

답변

5

파일이 열려있는 동안 원하는 모든 작업을 수행 할 수 있습니다.

나는 하나의 작업 집합에서 파일의 끝까지 읽은 다음 끝에있는 동안 파일을 다시 읽는 것이 문제라고 생각합니다. rewind() 함수를 찾으십시오.

파일의 처음으로 되감 으려면 첫 번째 카운트 단어 뒤에 rewind(fptrr);을 호출하십시오. 반대로 fseek(fptrr, 0L, SEEK_SET)으로 전화 할 수는 있지만 rewind()는 더 명확합니다.

파일을 닫은 다음 다시 열면 파일이 처음부터 읽기 양식으로 재설정되므로 새 버전이 작동하는 것입니다.

+0

고마워, 지금은 작동합니다. – SONI