Подсчитать сумму чисел встреченных в текстовом файле (числа могут быть вещественными и отрицательными) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Очень прошу помогите исправить код программы!!! задание такое:Подсчитать сумму чисел встреченных в текстовом файле (числа могут быть вещественными и отрицательными) Работает не правильно, не знаю как исправить(((
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
float my_atof(char s[]) {
    int i, sign;
    float val, power;
 
    for (i = 0; isspace(s[i]); i++)
    if (s[i] == '-') { sign = -1; } else { sign =  1;}
    if (s[i] == '+' || s[i] == '-') {
        i++;
    }
    
    for (val = 0.0; isdigit(s[i]); i++) {
        val = (10.0 * val) + (s[i] - '0');
    }
    
    if (s[i] == '.') {
        i++;
    }
    
    for (power = 1.0; isdigit(s[i]); i++) {
        val = (10.0 * val) + (s[i] - '0');
        power *= 10.0;
    }
    
    return  sign * val / power;
}
 
int main (int argc, char *argv[]) {
    float sum = 0.0;
    FILE * fd;
    char string[256];
    
    fd = fopen("data", "r");
    if (fd == NULL) {
        printf("Error opening file\n");
        return -1;
    }
 
    while (fscanf(fd, "%s", string) != EOF) {
        sum += my_atof(string);
    }
    fclose(fd);
 
    printf("Sum: %.2f\n", sum);
getch ();
    return 0;
}
Подскажите кто-нибудь(

Решение задачи: «Подсчитать сумму чисел встреченных в текстовом файле (числа могут быть вещественными и отрицательными)»

textual
Листинг программы
функция:
int isdig(char* line) {
    char vals[]="1234567890.";
    int sz=strlen(line);
 
    for (int i=0; i<sz; i++)
        if (!strchr(vals,line[i])) return 0;
 
    return 1;
}
 
мейн:   
FILE *fp = fopen("1.txt","rt");
 
    char line[100];
    double count=0;
 
    while (fscanf(fp,"%s",line)) {
        if (isdig(line))
            count+=atof(line);
        if (feof(fp)) break;
    }
 
    printf("%.3f\n",count);

Объяснение кода листинга программы

  1. В функции isdig происходит проверка, является ли символ строки числом.
  2. В функции используется массив vals, который содержит все возможные цифры и десятичную точку.
  3. Если в строке есть символ, которого нет в массиве vals, то функция возвращает 0, иначе 1.
  4. В основном блоке кода открывается файл 1.txt для чтения.
  5. Создается пустая строка line для считывания каждой строки файла.
  6. Инициализируется переменная count для хранения суммы чисел.
  7. Используется цикл while, который считывает каждую строку файла до тех пор, пока не достигнет конца файла.
  8. Если строка является числом (т.е. функция isdig возвращает 1), то число преобразуется в тип double с помощью функции atof и добавляется к переменной count.
  9. После окончания чтения файла выводится сумма чисел, округленная до трех знаков после запятой.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы