C编程:如何读取和添加文件

disho6za  于 2023-04-11  发布在  其他
关注(0)|答案(1)|浏览(117)

对于C编程,我如何做一个while或for循环来读取一个文件,然后把数字加在一起并求平均值?只使用库<math.h>,<stdio.h>我对C很陌生,所以请添加注解!
尝试使用while (fscanf(fin,"%", &x) !=EOF){ x++},但我不知道如何使它读取值。完整代码:

#include <stdio.h>
#include <math.h>
#define MXN 100

int main(void) {
    int n = 0;
    float avg, x;
      
    float scores[MXN];
     
    FILE * fin = fopen("values.txt", "r");
    while (fscanf(fin, "%f", &scores[n]) != EOF) {
        n++;  
    } 

    while (fscanf(fin, "%f", &x) != EOF) {
        x++;
    }
       
    avg = x/n;
    
    printf(" the array size is %d and the average of numbers read from the file is %f", n, avg);
    return 0;
}
8zzbczxx

8zzbczxx1#

你不需要将数字保存在数组中。只需在运行中添加它们。例如:

avg = 0;
while (fscanf(fin, "%f", &x) == 1){
    n++;
    avg = avg + x;  // or avg += x;
}
if (n > 0) {     // Avoid division by zero
    avg = avg/n;
}

还要注意,最好使用== 1而不是!= EOF检查fscanf返回值,因为如果文件包含非浮点值,则使用!= EOF可能会导致无限循环。
如果你出于某种原因更喜欢读入数组,你的代码可以是这样的:

while (n < MXN && fscanf(fin, "%f", &scores[n]) == 1) {
    n++;  
} 

avg = 0;
for (int i=0; i < n; ++i) {
    avg = avg + scores[i];   // or avg += scores[i];
}
if (n > 0) {     // Avoid division by zero
    avg = avg/n;
}

相关问题