저는 C 언어를 배우며 텍스트 파일에서 정수를 읽고 배열에 저장하는 작은 프로그램을 작성하여 연습하고 있습니다. 그러나 정수는 절대로 저장되지 않으며 배열은 비어 있습니다. 사전에fgetc 작업에 문제가 발생했습니다.
1 2 3 4 5 6 7 8 9
감사 :
int readNumbers(int array[], char* fname) {
78
79
80 int numberRead = 0;
81 FILE* fp;
82 int ch;
83 int i = 0;
84
85
86
87 fp = fopen(fname, "r");
88 // Test to see if the file was opened correctly
89
90 if (fp == NULL) {
91 printf("Error opening file\n");
92 return;
93 }
94 // Now read until end of file
95
96 while (ch = fgetc(fp) != EOF && isdigit(ch)) {
97 array[i++] = ch;
98 }
99 if (ferror(fp)) {
100 return;
101 }
102 // Close the file pointer
103
104 fclose(fp);
105
106 // Return the number of items read
107 return numberRead;
108 }
텍스트 파일은 다음과 같이 될 것이다.
코드를 업데이트했습니다. 이것은 거의 작동하지만 55
같은 문자를 5
및 5
으로 해석합니다. 따라서 배열에는 두 개의 5
이 있습니다.
while ((ch =fgetc(fp)) != EOF) {
97 if (ch != ' ' && ch != '\n') {
98 array[counter] = ch - '0';
99 counter++;
100 numberRead++;
101 }
102 }
변화는 fgetc '= CH (FP)! = EOF'에'(CH2 =는 fgetc (FP))! = EOF'. 비교 연산자는 할당보다 우선 순위가 높습니다. –
'ferror'가 약간 이상한 경우 파일을 닫지 않고 함수가 반환됩니다. 또한 인수없이'return; '을 갖는 것은 불법입니다. –
@MattMcNabb 감사합니다! – mrQWERTY