2017-04-16 40 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で行ったように、これは明らかでした。第2に、rand()はFP値をゼロからちょうど1未満に戻します。これは、rが常にゼロになることを意味します。おそらく、モジュロ(%)L "int r = rand()*(9 + 1 - 0)+ 0;の代わりに乗算(*最後に、 "rw +"のファイルをfprintfの後に置いても、ファイルポインタは最後に書き込まれた値の後ろに配置されるので、fscanf(両方とも)あなたがしようとしていることをするには、書き込まれた値をバックアップするためにfseekを使用する必要があります。これは、fscanf呼び出しのエラー状態を確認した場合にも明らかです。 うまくいけば、これは役に立ちました!

関連する問題