动态分配整数数组,将它们存储在文件中,并在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("%dt",*(tab+i));
    sum+=*(tab+i);
  }
  float mean=sum/(float)n;
  printf("%fn",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

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

  1. 在第一个循环中将数据写入文件时,您应该通过空间或newline将数字分开,例如

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

    fseek(fp, 0, SEEK_SET);
    

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

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

完成后应fclose文件。

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

在尝试读取文件内容之前,您需要在每个输入的号码后编写一个' n'并将文件位置设置为文件的开头。/p>

#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,"%dn",*(tab+i));
}
rewind(fp);
for(i=0;i<n && !(feof(fp));i++){
    fscanf(fp,"%d",tab+i);
    printf("%dt",*(tab+i));
    sum+=*(tab+i);
}
float mean=sum/(float)n;
printf("%fn",mean);
free(tab);
}

相关内容

最新更新