2017-04-16 4 views
1

Ich habe Probleme beim Lesen aus der Datei data.txt. Zufallszahlen werden in Abhängigkeit von der n erzeugt, die es jedoch gegeben, wenn ich die Daten überprüfen mit fscanf es gibt 0'en für beide Male in dem Code, den ich überprüfen `Ergebnisse von fscanf sind immer 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); 
     } 
} 

`

Antwort

0

Ich glaube, Sie haben hier ein paar Probleme. Zuerst haben Sie die Datei für den Schreibzugriff geöffnet, versuchen aber auch, sie zu lesen ... Ich glaube, Sie müssen stattdessen mit "rw +" fopen; Wenn Sie den Rückgabewert der fscanfs wie bei fopen überprüft hätten, wäre dies offensichtlich gewesen. Zweitens gibt rand() einen FP-Wert von Null bis knapp unter 1 zurück, was bedeutet, dass r immer Null ist. Vielleicht wollten Sie Multiplikation (*) anstelle von Modulo (%) L "int r = rand() * (9 + 1 - 0) + 0;" (oder die einfachere "int r = rand() * 10;" Und schließlich, auch wenn die Datei für "rw +" geöffnet ist, folgt Ihr fprintf dem Dateizeiger nach dem letzten geschriebenen Wert, also Ihrem fscanf (beide) würde fehlschlagen, weil es dort nichts zu lesen gibt.Für das, was Sie versuchen, müssten Sie fseek verwenden, um den gerade geschriebenen Wert zu sichern.Dies wäre wiederum offensichtlich, wenn Sie den Fehlerstatus Ihrer fscanf-Aufrufe überprüft hätten Hoffentlich war das hilfreich!