动态分配整数数组,将它们存储在文件中,并在c中查找它们的平均值
我目前正在解决一个关于动态内存分配的赋值问题,它说我应该动态分配一个整数数组,将它们以表格的形式存储在一个文件中,然后查找并打印这些数字的平均值。但是当涉及到打印平均值时,我得到了错误的结果动态分配整数数组,将它们存储在文件中,并在c中查找它们的平均值,c,file,dynamic,malloc,C,File,Dynamic,Malloc,我目前正在解决一个关于动态内存分配的赋值问题,它说我应该动态分配一个整数数组,将它们以表格的形式存储在一个文件中,然后查找并打印这些数字的平均值。但是当涉及到打印平均值时,我得到了错误的结果 #include <stdio.h> #include <stdlib.h> int main(){ FILE *fp=fopen("some.txt","w+"); printf("How many numbers are you going to input?\n");
#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);
}
代码中有两个主要问题
fprintf(fp,"%d\n",*(tab+i));
fseek(fp, 0, SEEK_SET);
feof()
只能在读取操作之后使用,例如在fscanf
之后使用,以区分EOF或错误
完成后,您应该fclose
文件
您应该检查所有功能的结果,例如,
fopen
没有返回NULL
指针,scanf
或fscanf
成功转换了预期的项目数,…您需要在每个输入的数字后写一个“\n”,并将文件位置设置为文件的开头,在尝试读取文件内容之前。。看:
#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\n",*(tab+i));
}
rewind(fp);
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);
}
#包括
#包括
int main(){
文件*fp=fopen(“some.txt”,“w+”);
printf(“您要输入多少个数字?\n”);
int n,i;
scanf(“%d”和“&n”);
int*选项卡;
整数和=0;
tab=(int*)malloc(n*sizeof(int));
对于(i=0;iOT:为了便于阅读和理解:1),请一致地缩进代码。在每个左大括号“{”之后缩进。在每个右大括号“}之前缩进“.建议每个缩进级别为4个空格。2)单独的代码块:用于如果否则当执行时…当切换
时,通过一个空行执行默认值。3)遵循公理:每行只有一条语句,并且(最多)每个语句一个变量声明。OT:调用fopen()
时,始终检查(!=NULL)返回值以确保操作成功。如果不成功,则调用:peror()
要同时输出错误消息和系统认为发生错误的文本原因,请不要使用feof,而是检查scanf和fscanf返回1(在您的情况下)OT:About:tab=(int*)malloc(n*sizeof(int));
1)返回的类型是void*
,可以分配给任何指针。强制转换只会使代码变得混乱,使其更难理解、调试等。2)始终检查(!-NULL)返回值以确保操作成功。如果不成功,请调用peror()
要同时输出错误消息和文本原因,系统认为stderr发生错误的原因与:for(i=0;不得使用iadd feof,但OP必须检查scanf和fscanf返回1(在is情况下)。可能会解释更多的说法,即在整数打印之间没有分隔符,结果是一个整数
#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\n",*(tab+i));
}
rewind(fp);
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);
}