2017-04-16 4 views
1

Je semble avoir des difficultés à lire le fichier data.txt. Les nombres aléatoires sont générés en fonction du n qu'il est donnée mais quand je vérifie les données avec fscanf retourne 0 est pour les deux fois dans le code que je vérifie `Les résultats de fscanf sont toujours 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); 
     } 
} 

`

Répondre

0

Je crois vous avez quelques problèmes ici. D'abord, vous avez ouvert le fichier pour l'accès en écriture, mais essayez de le lire aussi ... Je crois que vous devez ouvrir avec "rw +" à la place; Si vous aviez vérifié la valeur de retour de fscanf, comme vous l'avez fait avec fopen, cela aurait été apparent. Deuxièmement, rand() renvoie une valeur de FP de zéro à juste moins de un ... ce qui signifie que r sera toujours égal à zéro. Peut-être que vous vouliez utiliser la multiplication (*) au lieu de modulo (%) L "int r = rand() * (9 + 1 - 0) + 0;" (ou le plus simple "int r = rand() * 10;"? Et enfin, même avec le fichier ouvert pour "rw +", après votre fprintf le pointeur de fichier est positionné après la dernière valeur écrite, donc votre fscanf (les deux) Pour faire ce que vous essayez, vous devrez utiliser fseek pour sauvegarder sur la valeur qui vient d'être écrite, encore une fois si vous aviez vérifié l'état d'erreur de vos appels fscanf Espérons que cela a été utile!