我当前正在求解有关动态内存分配的作业,它说我应该动态分配整数,以表格将其存储在文件中,以后找到并打印平均在这些数字中。但是在打印平均值时,我得到了错误的结果。
#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
您的代码中有两个主要问题。
-
在第一个循环中将数据写入文件时,您应该通过空间或newline将数字分开,例如
fprintf(fp,"%dn",*(tab+i));
-
在编写和读取文件之间,您应该回到开始。在两个循环之间插入
fseek(fp, 0, SEEK_SET);
在某些情况下,代码中还有更多错误可能导致问题:
函数 feof()
只能在之后使用>读取操作,例如。fscanf
之后以区分EOF或错误。
完成后应fclose
文件。
您应该检查所有功能的结果,例如fopen
没有返回NULL
指针,scanf
或fscanf
成功转换了预期的项目数,...
在尝试读取文件内容之前,您需要在每个输入的号码后编写一个' 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);
}