输出的算数平均数永远为0,从文件中读取的temp永远是0,请问是哪里出现了问题,谢谢
/*
编写一个程序,不接受任何参数或接受一个命令行参数,
如果有一个参数,将其解释为文件名,如果没有参数,交互得到文件名,
往文件内输入浮点数,假设输入全是浮点数,该程序要计算并报告输入数字的算数平均值
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 30
char * s_gets(char * st,int n);
int main(int argc,char * argv[]){
char filename[SIZE];
FILE *fp;
double numbers[4];
double sum=0.0;
int count=0;
if(argc==1){ //命令行无待处理的文件名
if(s_gets(filename,SIZE)){ //通过交互给文件名获取成功
if((fp=fopen(filename,"wb"))==NULL){ //不可以以二进制方式写进文件
fprintf(stderr,"Can't write the file %s .\n",filename);
exit(EXIT_FAILURE);
}
else{ //可以以二进制方式写文件
int num=0;
fread(numbers,sizeof(double),4,stdin); //从标准输入读数字
num=fwrite(numbers,sizeof(double),4,fp); //写出到文件内
// rewind(fp); //把指针指向文件最开始位置
fclose(fp);
if((fp=fopen(filename,"rb"))==NULL){ //不可以以二进制方式读文件
fprintf(stderr,"Can't write the file %s .\n",filename);
exit(EXIT_FAILURE);
}
for(int i=0;i<num;i++){
double temp;
long offsets=(long)i*sizeof(double);
fseek(fp,offsets,SEEK_SET);
fread(&temp,sizeof(double),1,fp); //读文件
sum+=temp;
}
if(num>0){
printf("算数平均数为:%f\n",sum/num);
}
else{
fprintf(stderr,"zero\n");
}
fclose(fp);
}
}
else{ //通过交互获取文件名失败
fprintf(stderr,"Error in getting filename .\n");
exit(EXIT_FAILURE);
}
}
else if(argc==2){ //命令行有待处理的文件名
//同argc==1时的情况,此处省略
}
else{ //命令行参数太多,报错退出
fprintf(stderr,"Too much arguments in file %s .\n",argv[0]);
exit(EXIT_FAILURE);
}
return 0;
}
char * s_gets(char * st,int n){
char * ret_val;
char * find;
ret_val=fgets(st,n,stdin);
if(ret_val){
find=strchr(st,'\n');
if(find){
*find='\0';
}
else{
while(getchar()!='\n'){ //清空标准输入缓冲区数据
continue;
}
}
}
return ret_val;
}