О языковом файле C IO.Как рассчитать среднее значение по входным данным файла(fgets)

#c

Вопрос:

Задача состоит в том, чтобы предположить, что файл уже существует, что файл равен одному баллу на строку, и мы не знаем, сколько баллов в файле. нам это нужно, чтобы рассчитать среднее значение по каждому баллу. один пример:

  test.txt=21
          43
          32
          54
 

в тестовом файле. нам это нужно, чтобы (21 43 32 54)/4 ;
и мой прогресс заключается в использовании цикла for для ввода значения оценки.
далее вводится значение по fgets() .

но мой средний код-это не действие. Я думаю, что моя ошибка в коде заключается в том, что » s fgets » означает строку. это правильно? и тогда мой ввод-строка, но расчет выполняется в двойном размере.

и я не знаю, где изменить свой код. если у вас есть какое-либо полезное мнение, пожалуйста, дайте мне знать. введите описание изображения здесь

Комментарии:

1. Ты злоупотребляешь one . Это множество int нет char .

2. sum=sum one в этом нет никакого смысла. Что ты имеешь в виду?

3. Включите предупреждения вашего компилятора. Это расскажет вам о некоторых проблемах.

4. В следующий раз опубликуйте код, а не изображение.

5. хорошо, большое спасибо за комментарий !!

Ответ №1:

Я смог решить эту проблему, используя getline такую функцию:

 #include <stdio.h>
#include <stdlib.h>
int main() {
    int num = 0, sum = 0;
    double avg = 0;

    FILE* fp;
    char * line = NULL;
    size_t len = 0;
    size_t read;

    fp = fopen("scores.txt", "r");
    if(fp == NULL) {
        printf("Fail to the filen");
        exit(EXIT_FAILURE);
    }
 

каждая строка представляет собой строку с числом (строкой)
с помощью atoi функции приведите ее к целочисленному:

     while(read = getline(amp;line, amp;len, fp) != -1) {
        sum  = atoi(line);
        num  ;
    }
    
    avg = (double)sum / num;
    printf("%d scores readnscores avg: %lfn", num, avg);
    fclose(fp);
}
 

результатом avg будет среднее значение всех чисел в файле,
например, из вашего файла вывод будет:

 4 scores read
scores avg: 37.500000
 

Ответ №2:

смотрите в своем коде, что вы используете sum как целое число и единицу как массив и используете код

 sum = sum   one;
 

что неверно, так как весь массив не может быть добавлен как одно значение за раз, как вы использовали.
таким образом, вместо ненужного и неправильного использования массива u может использовать переменную с плавающей точкой и сканировать значения файла в нее(используя fscanf), добавлять ее в сумму и обновлять ее каждый раз, когда сканируется новая строка.

мы просматриваем файл здесь, используя feof (), который используется для поиска конца файла.

 #include <stdio.h>
 int main()
 {
 float sum=0,count=0,avg,val; // declaring necessary variables
 FILE *fin;
 if ( (fin = fopen("c:₩₩Ubuntu20.04₩₩scores.txt","r"))== NULL )// file is opened
 printf ("file can't be opened");
 else
{
while(!feof(fin)) // using while loop till the end of file 
 {
fscanf(fin,"%d",amp;val);
sum  = val; // Math for sum here
count  ;
}
}
 fclose(fin);
avg = sum/count; // math for average calculation
printf("n the average is : %.3fn",avg"); // printing average till 3 decimal points
 return 0;  
 }
 

приведенный выше код будет работать для вас для любого файла.
P.S. если вы хотите улучшить английский язык https://play.google.com/store/apps/details?id=com.duolingoamp;hl=en_INamp;gl=US использование этого приложения очень поможет