Подсчитать сумму чисел встреченных в текстовом файле (числа могут быть вещественными и отрицательными) - 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);
Объяснение кода листинга программы
- В функции
isdig
происходит проверка, является ли символ строки числом. - В функции используется массив
vals
, который содержит все возможные цифры и десятичную точку. - Если в строке есть символ, которого нет в массиве
vals
, то функция возвращает0
, иначе1
. - В основном блоке кода открывается файл
1.txt
для чтения. - Создается пустая строка
line
для считывания каждой строки файла. - Инициализируется переменная
count
для хранения суммы чисел. - Используется цикл
while
, который считывает каждую строку файла до тех пор, пока не достигнет конца файла. - Если строка является числом (т.е. функция
isdig
возвращает1
), то число преобразуется в типdouble
с помощью функцииatof
и добавляется к переменнойcount
. - После окончания чтения файла выводится сумма чисел, округленная до трех знаков после запятой.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д