c - 动态分配整数数组,将它们存储在文件中并在 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
解决方案
您的代码中有两个主要问题。
在第一个循环中将数据写入文件时,您应该用空格或换行符分隔数字,例如
fprintf(fp,"%d\n",*(tab+i));
在写入和读取文件之间,您应该回到开头。在两个循环之间插入
fseek(fp, 0, SEEK_SET);
代码中还有一些错误在某些情况下可能会导致问题:
函数feof()
只能在读操作之后使用,例如在fscanf
区分 EOF 或错误之后。
完成后,您应该fclose
文件。
您应该检查所有函数的结果,例如,fopen
没有返回NULL
指针,scanf
或者fscanf
成功转换了预期的项目数,......
推荐阅读
- node.js - 使用新字段和值缓慢(500/秒)更新 MongoDB 数据库中的许多文档的最佳方法是什么?
- vuejs2 - 如何将最小值和最大值添加到我的 Vue 计数值
- node.js - 如何在纯 JavaScript 文件或简单节点项目中从 React 之外的 normalizr 节点包导入规范化、模式函数
- excel - 如何从 Perl 中的 XLSX 文件中获取单元格格式?
- angular - 通过调用选择器属性在一页Angular 8中显示多个组件
- c++ - C++ 继承和 valgrind 内存泄漏
- continuous-integration - CI/CD 管道中的自动英语拼写检查
- java - 如何将领域数据库结果显示到编辑文本?
- php - 在共享服务器上部署 laravel 应用后找不到路由
- azure - Azure Web 应用程序中的随机“密钥集不存在”