#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 использование этого приложения очень поможет