fscanf的结果总是0。

时间:2017-04-16 00:20:27

标签: file-io scanf c89

我似乎无法从文件data.txt中读取内容。根据给出的n生成随机数,但是当我用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);  
      }
}

`

1 个答案:

答案 0 :(得分:0)

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