2017-04-16 15 views
1

data.txt 파일에서 읽는 데 문제가있는 것 같습니다. 난수는 나는 그것이 내가 `fscanf의 결과는 항상 0입니다.

#include<stdio.h> 
#include <stdlib.h> 

#define DATA_FILE "data.txt" 
#define OUT_FILE "output.txt" 

void write_data(FILE *data, int n); 
int main(void) 
{ 
int n, i, element; 
FILE *dataf = fopen(DATA_FILE, "w+"); 
     if (dataf == NULL) 
     { 
      printf("Can't open %s\n", DATA_FILE); 
      exit(EXIT_FAILURE); 
     } 
printf("Enter the amount of data entries: --> "); 
scanf("%d", &n); 
write_data(dataf, n); 

for (i = 0; i < n; i++) 
{ fscanf(dataf, "%d", &element); //first attempt to read the file 
    printf("%d\n", element); 
} 
fclose(dataf); 
return 0; 
} 
void write_data(FILE *data, int n) 
{ 
    int i, element; 
    srand(time(NULL)); 
    for(i = 0; i < n; i++) 
     { 
     int r = rand() % (9 + 1 - 0) + 0; 
     fprintf(data, "%d", r); 
     fscanf(data, "%d\n", &element); //second attempt to read the file 
     printf("%d\n", element); 
     } 
} 

`

답변

0

믿을 확인 코드에서 두 번 0의를 반환 fscanf와 데이터를 확인 할 때 그러나 주어진 N에 따라 생성되고있다 여기에 몇 가지 문제가 있습니다. 먼저, 쓰기 액세스를 위해 파일을 열었지만 그것을 읽으려고합니다 ... 나는 당신이 "rw +"로 대신 fopen 할 필요가 있다고 믿습니다; fscanf의 리턴 값을 확인했다면, fopen을 사용했을 때와 마찬가지로 이것이 분명했을 것입니다. 둘째, rand()는 FP 값을 0에서 1 미만으로 반환합니다 ... 이는 r이 항상 0임을 의미합니다. 아마도 당신은 모듈로 (%) L 대신에 곱셈 (*)을 사용하려고했습니다. "int r = rand() * (9 + 1 - 0) + 0;" 마지막으로 fprintf 다음에 "rw +"파일이 열리더라도 파일 포인터는 마지막 값이 기록 된 후 위치하므로 fscanf (둘 다) 당신이 시도하고있는 일을하기 위해서 fseek를 써서 방금 쓴 값을 백업해야 할 것입니다. fscanf 호출의 에러 상태를 체크했다면 이것은 분명했습니다. . 도움이 되었기를 바랍니다.