Как найти сумму чисел в файле с

Обновлено: 04.07.2024

C++.Посчитать сумму вещественных чисел из txt-файла

C++.Посчитать сумму вещественных чисел из txt-файла В строках текстового файла записаны десятичные числа (не целые – т.е. может быть точка), разделённые пробелами и (или) символами перевода строки.
вроде бы знаю основные функции для работы с файлами,но что то не могу реализовать.вот пытался написать, но дальше ступор. направьте на путь истинный.плиз

Вы проверяли в отладчике, что именно не работает?

Сразу бросаются в глаза следующие вещи. Так как файл текстовый, то второй аргумент функции fopen должен быть "rt" (может быть, это и неважно, но так лучше). В функции fscanf лучше не указывать точный формат представляемых чисел, а просто задать спецификатор %f. Необходимо обязательно проверять возвращаемое значение функции fscanf, оно должно быть равно 1. Дело в том, что если функция не считала значение по какой-либо причине, то переменная x будет содержать либо предыдущее значение, либо мусор, так что sum в любом случае станет неправильной.

Я рекомендую вообще не пользоваться проверкой eof, а ограничиться только проверкой возвращаемого значения fscanf, если оно не равно 1 - то прерывать цикл.

На самом деле, самая серьезная (хотя несерьезных ошибок не бывает) проблема кода Moko - отсутствие символа амперсенда перед переменной 'x' в функции fscanf.

Жуткий оффтопик, но.

А вот я например не знаю синтаксиса функции scanf() . Вообще-то, за 7+ лет проффесионального программирования не пригодилась ни разу . Правда, и область довольно специфична - embedded C/C++, но все-таки. Ни разу не возникло желания ее использовать. Примерные возможности функции знаю, тестировал.

Хотелось бы понять - что, действительно столь полезная функция в реальных программных проектах? Вообще-то, ИМХО, если парсинг - то по-серьезному. Если побаловаться, то. все равно есть более простые решения, чем scanf(). В чем моя ошибка? (в ДНК не предлагать! .

Я пользуюсь этой функцией часто. Ну вот, скажем, пример: есть большой набор объектов и для каждого, скажем, по три целочисленные характеристики. Все это выведено в текстовый файл, на каждой строчке - имя объекта и перечислены характеристики. Как это загрузить в программу для обработки? Самому писать парсер? Зачем, когда со scanf это одна строчка
вот учел все ваши советы, изменил , все компилится но не считает сумму чисел, а выводит левое число что не так, подскажите плиз
p.s. PAV :Я рекомендую вообще не пользоваться проверкой eof, а ограничиться только проверкой возвращаемого значения fscanf, если оно не равно 1 - то прерывать цикл.
я не понял как это проверять. может покажешь?

да теперь считает.

Добавлено спустя 4 минуты 15 секунд:

а как теперь реализовать в случае если в фаиле будет две точки или к примеру буква стоять, исключительные ситуации. плохо представляю как это реализовать. помогите плиз

Что-то вроде такого

Добавлено спустя 7 минут 13 секунд:

а как теперь реализовать в случае если в фаиле будет две точки или к примеру буква стоять, исключительные ситуации. плохо представляю как это реализовать. помогите плиз

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

Если хотите пропускать лишние символы, то можно сделать что-то вроде такого: если fscanf не сумела считать число, а файл еще не кончился, то можно считать один символ и пробовать читать дальше.

С двумя точками посложнее, так как они стоят в середине одного числа. Можно попробовать считать во вспомогательный буфер строку и предварительно ее обработать, заменив, например, две точки на одну, и затем из нее считывать числа. Но в любом случае нужно продумать, что Вы хотите видеть, например, если файл будет содержать текст "1.2.3" и много других похожих примеров. Короче, нужна модель ошибок во входных данных, которые программа должна исправлять.

Люди добрые а подскажите пожалуйста .
Надо считать числа с блокнота в одномерный массив
Вообщем все тоже самое , но работать не хочет .

Читайте также: