fscanf的结果总是0.

问题描述:

我似乎无法从文件data.txt中读取数据。取决于当我检查数据与的fscanf返回0的在码两次,我检查 `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); 
     } 
} 

`

我相信,然而考虑到n的生成随机数这里有一些问题。首先,你打开文件进行写入访问,但也试图读取它......我相信你需要用“rw +”来代替;如果你已经检查过fscanf的返回值,就像你用fopen做的那样,这将是显而易见的。其次,rand()返回从0到小于1的FP值,这意味着r将始终为零。也许你打算用乘法(*)代替模(%)L“int r = rand()*(9 + 1-0)+ 0;” (或者更简单的“int r = rand()* 10;”?最后,即使文件为“rw +”打开,在fprintf之后,文件指针位于写入的最后一个值之后,所以您的fscanf(两者都是)会失败,因为这里没有东西要读,要做你正在尝试的东西,你必须使用fseek来备份刚刚写入的值。再一次,如果你已经检查了fscanf调用的错误状态。 希望这有帮助!