С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 21

Работа с текстовыми файлами

17.04.2018, 22:41. Показов 1227. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть програма которая используя числа из текстового файла input.txt и решает по формуле указанной в программе.
Код программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "stdafx.h"
#include <iostream>
#include <fstream>
 
 
using namespace std;
 
int main()
{
    ifstream fin("1.txt");
    double a, b;
    try
    {
        if (!fin.good())
        {
            throw "File input.txt doesn't exist!";
        }
        fin >> a >> b;
        cout << "K oplate: " << a * b / 100 << " UAH.\n";
    }
    catch (const char* error)
    {
        cout << error << "\n";
    }
    fin.close();
    return 0;
}
Мне нужно сделать так, что-бы при отсутствии текстового файла программа создавала его сама и оставляла его не заполненым. И что для меня более важно, если в текстовом файле отсутствуют или некоректно введены данные, то выдаёт ошибку "Некоректный формат данных" или "Отсутствуют данные". Зарание спасибо!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.04.2018, 22:41
Ответы с готовыми решениями:

Работа с текстовыми файлами
Делаю лабы по С++. Необходимо записать несколько строк в файл, а затем считать их оттуда. Использую методы, описанные в методичке (по сути,...

Работа с текстовыми файлами
Всем доброго дня! Нужна помощь в решении следующей работы: Нужно создать файл, содержащий текст, набранный заглавными английскими...

Работа с текстовыми файлами
Пожалуйста, помогите с задачей: Дан файл f, компоненты которого являются действительными числами. Найти: 1.наибольшее из значений...

12
 Аватар для axela002
71 / 58 / 48
Регистрация: 12.03.2017
Сообщений: 563
17.04.2018, 23:36
Цитата Сообщение от _easy_ Посмотреть сообщение
Мне нужно сделать так, что-бы при отсутствии текстового файла программа создавала его сама и оставляла его не заполненым.
Пpи созднии объекта откpытии файла для записи в него
C++
1
2
ofstream obj;
obj.open(name.txt);
Если файла нет, то он создает его автоматически.

Добавлено через 4 минуты
Цитата Сообщение от _easy_ Посмотреть сообщение
И что для меня более важно, если в текстовом файле отсутствуют или некоректно введены данные, то выдаёт ошибку "Некоректный формат данных" или "Отсутствуют данные"
если файл создается пpи pаботе пpогpаммы, то ставь условие пpовеpки, что запись в файл только целочисленные значения т.е int.
1
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 21
18.04.2018, 21:18  [ТС]
Хорошо, а если у меня уже есть текстовый файл с данными с названием "1.txt" оно стирает всю информацию из моего файла и снова его создаёт уже пустым программа пишет в строчке вместо ответа некое "inf", это из-за того что у меня стоит "double" вместо "int", но в том то и проблемма что я работаю именно с десятичными числами.
0
 Аватар для axela002
71 / 58 / 48
Регистрация: 12.03.2017
Сообщений: 563
18.04.2018, 22:58
Цитата Сообщение от _easy_ Посмотреть сообщение
Хорошо, а если у меня уже есть текстовый файл с данными с названием "1.txt" оно стирает всю информацию из моего файла и снова его создаёт уже пустым программа пишет в строчке вместо ответа некое "inf", это из-за того что у меня стоит "double" вместо "int", но в том то и проблемма что я работаю именно с десятичными числами.
Без кода ничего сказать не могу.
0
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 21
18.04.2018, 23:13  [ТС]
Кстати код у меня частично изменился:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "stdafx.h"
#include <iostream>
#include <fstream>
 
 
using namespace std;
 
int main()
{
    ifstream fin("input.txt");
    ofstream obj; // правильно ведь поставил ваши строчки?
    obj.open("input.txt");
    double a, b;
    try
    {
        if (!fin.good())
        {
            throw "File input.txt doesn't exist! Please create it and fill the data";
        }
                // примерно здесь думаю стоит сделать проверку на коректность данных из текстового файла
        fin >> a >> b;
        cout << "K oplate: " << a * b / 100 << " UAH.\n";
    }
    catch (const char* error)
    {
        cout << error << "\n";
    }
    fin.close();
    return 0;
}
А в текстовом файле, если вдруг важно, числа лежат в столбик.
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
18.04.2018, 23:29
Вы файл затираете в строчках 11-12. Они должны выполняться только после неуспешной попытки открыть файл.
1
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 21
18.04.2018, 23:32  [ТС]
Хорошо, значит получается:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "stdafx.h"
#include <iostream>
#include <fstream>
 
 
using namespace std;
 
int main()
{
    ifstream fin("input.txt");
    double a, b;
    try
    {
        if (!fin.good())
        {
            throw "File input.txt doesn't exist! Please create it and fill the data";
        }
                // примерно здесь думаю стоит сделать проверку на коректность данных из текстового файла
        fin >> a >> b;
        cout << "K oplate: " << a * b / 100 << " UAH.\n";
    }
    catch (const char* error)
    {
        cout << error << "\n";
    }
    fin.close();
    return 0;
}
Правильно?
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
18.04.2018, 23:33
Лучший ответ Сообщение было отмечено _easy_ как решение

Решение

_easy_, правильно, но пустой файл создаваться не будет. Если он нужен, добавьте проверку перед теми строчками.
0
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 21
18.04.2018, 23:37  [ТС]
Ну вобщем новый пустой файл не обязателен т.к. есть просто сообщение про отсутствие файла. А вот про наличие данных в определённом их колличестве (2 строчки = 2 переменные) в файле очень даже кстати.
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
18.04.2018, 23:41
_easy_, второе предложение не понял о чем. Какие то проблемы еще остались?
0
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 21
18.04.2018, 23:47  [ТС]
По факту проверка на наличие самого текстового файла уже работает.
Я хочу добавить вторую проверку. Если файл пустой - выводить сообщение. Как это написать, используя "fseek". И нужна третья проверка на наличие 6 чисел в текстовом файле, често я хз как их сделать
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
18.04.2018, 23:49
_easy_, зачем использовать fseek? Сделайте счетчик и увеличивайте его после каждого считывания a и b. Если считано 0 пар значений, то это и будет ваша вторая проверка. Если считано 6 пар значений (или 3?), то это ваша третяя проверка.
1
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
10.05.2018, 21:19
Цитата Сообщение от _easy_ Посмотреть сообщение
Как это написать, используя "fseek".
Здравствуйте! Проверить файл на пустоту можно, например, так:

C++
1
2
3
4
5
6
7
8
9
bool ifFileIsEmpty() {
    ifstream fin("input.txt");
    long fsize;
    fin.seekg(0, ios::end);
    fsize = fin.tellg();
    if (fsize == 0) return true;
    return false;
    fin.close();
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.05.2018, 21:19
Помогаю со студенческими работами здесь

Работа с текстовыми файлами
Здравствуйте, уважаемые !!! Появились проблемы во время решения задачи. Никак не могу решить проблему. Задача такова: Существует...

Работа с текстовыми файлами
3)Разработать программу, которая выполняет следующие действия: создает входной поток для построчного чтения из внешнего файла и выходной...

Работа с текстовыми файлами
Доброго времени суток. Есть ф-ия: void FillM(int **&amp;tab, int &amp;w, int &amp;h) { FILE *f; ...

Работа с текстовыми файлами
Разработать программу, которая: а) создает текстовый файл TF5_1 с символьных строк различной длины; б) читает содержимое файла TF5_1,...

Работа с текстовыми файлами
Доброй ночи. Будте добры, помогите сделать задачу с файлами. Теоретически понимаю что нужно делать, а программно реализовать не могу( ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru