从C中的文件中查找最大和最小浮点数

我正在编写一个程序使用C只是为了从我的输入文件中找到包含大约500个浮动数字(如54.54)的最大和最小数字。 我可以让程序运行,但输出显示我的min是0,我的最大值是54.88,这是文件中的第一个数字。 这是我到目前为止所拥有的。

#include  int main(int argc, const char * argv[]) { FILE * fp; fp=fopen("file.txt","r"); if (fp==NULL) { printf("Failed to open"); } float i; float min ; float max ; { fscanf( fp, "%f", &i); if (i  max) max = i; } printf("Data range is: %f %f \n", min, max); return 0; } 

应将最小值/最大值初始化为适当的值。 例如。

 float inf = 1.0 / 0.0; // also in math.h as INFINITY? float max = -inf; float min = inf; float i; 

另一种选择是将min和max初始化为从文件读取的第一个值。 这是编写循环的一种方法:

 while (fscanf(fp, "%f", &i)==1) // { ... } 

保留大部分代码:

 #include  int main(int argc, const char * argv[]) { float i=0, min=0, max=0; FILE * fp fp=fopen("file.txt","r"); if (fp==NULL) { perror("Failed to open file."); return EXIT_FAILURE; } if (fscanf(fp,"%f", &i) == 1) { min = max = i; while (fscanf( fp, "%f", &i) == 1) { if (i < min) min = i; else if (i > max) max = i; } } printf("Data range is: %f %f \n", min, max); return 0; } 

对不起任何错别字。

该计划符合该法案。

 #include  int main() { float num; float min = 999.99; /*Max value of number your file will not exceed*/ float max = 0; int i = 0; FILE *fp; fp = fopen("file.txt", "r"); while(fscanf(fp,"%f",&num) == 1) { if (num < min) min = num; if (num > max) max = num; } fclose(fp); printf("Data range is: %f %f \n", min, max); return 0; } 

您没有循环读取文件中的所有数字。 你得到的只是第一个。

这是你可以做到的一种方式,如果你知道你每条线上只有一个双。 它可能不是最优雅的,但在我脑海中编译它似乎可以完成工作。

(我没有对这段代码进行错误测试,而且我也不确定这是否是最大和最小双值的正确宏)

 char buf[10]; /* as big as the biggest number */ char c; int i = 0; double d, dmax = -INFINITY, dmin = INFINITY; while ((c = getc(fp)) != EOF) { if (c != '\n') buf[i++] = c; else { buf[i] = '\0'; d = atof(buf); if (d > dmax) dmax = d; if (d < dmin) dmin = d; i = 0; } }