【问题标题】:results of fscanf are always 0.fscanf 的结果始终为 0。
【发布时间】:2017-04-16 00:20:27
【问题描述】:

我似乎无法读取文件 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);  
      }
}

`

【问题讨论】:

    标签: file-io scanf c89


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-02-18
      • 1970-01-01
      • 2020-10-17
      • 2016-12-17
      • 2021-02-28
      • 2012-12-09
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多