首页 > 解决方案 > 动态分配整数数组,将它们存储在文件中并在 c 中找到它们的平均值

问题描述

我目前正在解决关于动态内存分配的任务,它说我应该动态分配一个整数数组,将它们以表格的形式存储在文件中,然后查找并打印这些数字的平均值。但是当涉及到打印平均,我得到错误的结果。

#include <stdio.h>
#include <stdlib.h>

int main(){
  FILE *fp=fopen("some.txt","w+");
  printf("How many numbers are you going to input?\n");
  int n,i;
  scanf("%d",&n);

  int *tab;
  int sum=0;
  tab=(int*)malloc(n*sizeof(int));
  for(i=0;i<n && !(feof(fp));i++){
    printf("Enter a number:\n");
    scanf("%d",tab+i);
    fprintf(fp,"%d",*(tab+i));
  }
  for(i=0;i<n && !(feof(fp));i++){
    fscanf(fp,"%d",tab+i);
    printf("%d\t",*(tab+i));
    sum+=*(tab+i);
  }
  float mean=sum/(float)n;
  printf("%f\n",mean);
  free(tab);
}

这是一个示例输入,它应该打印我写入文件中的所有数字,并作为最后的平均值,它应该打印 4.6666(对于这三个特定的输入,类似这样)

    How many numbers are you going to input?
    3

    Enter a number:
    4

    Enter a number:
    5

    Enter a number:
    5

    4   1.333333

标签: cfiledynamicmalloc

解决方案


您的代码中有两个主要问题。

  1. 在第一个循环中将数据写入文件时,您应该用空格或换行符分隔数字,例如

    fprintf(fp,"%d\n",*(tab+i));
    
  2. 在写入和读取文件之间,您应该回到开头。在两个循环之间插入

    fseek(fp, 0, SEEK_SET);
    

代码中还有一些错误在某些情况下可能会导致问题:

函数feof()只能读操作之后使用,例如在fscanf区分 EOF 或错误之后。

完成后,您应该fclose文件。

您应该检查所有函数的结果,例如,fopen没有返回NULL指针,scanf或者fscanf成功转换了预期的项目数,......


推荐阅读