Не могу записать числовые данные в текстовый файл

231
07 декабря 2017, 00:47

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

#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
using namespace std;
int main(void)
{
    double dbla, dblb, dbld, dblx, dblResult;
    int ic;
    fstream stream;
    stream.open("data.txt", ios::app | ios::out);
    if (!stream) 
    {
        cout << "Error while opening file";
        Sleep(2000);
        exit(1);
    }
    stream >> dbla;
    stream >> dblb;
    stream >> ic;
    stream >> dbld;
    do {
        cout << "Enter the value of variable x : ";
        cin >> dblx;
        try
        {
            if (dblx == 0)
                throw dblx;
            stream << dblx;
            dblResult = (dbla - dblb * ic) / (dbld * dblx);
            stream << dblResult;
        }
        catch(double dblx)
        {
            cout << "Dividing by zero!!!";
        }

    } while (1);

    stream.close();
    system("pause");
    return 0;
}
Answer 1

Тебе надо завести два потока: input для чтения данных и output для вывода (естественно, это должны быть разные файлы). Кроме того советую следующие правки:

  • убрать include <string> (ты всё равно не пользуешься им);

  • убрать using namespace std; и писать std::cin, std::cout и т.д.;

  • убрать void из объявления main: в C++ это лишнее;

  • не использовать Sleep и system("pause") и, соответственно, убрать #include <windows.h>. См. Использование system("pause")

  • бесконечный цикл организовывать с помощью for ( ; ; );

  • заменить try … catch на if …{ … exit … };

  • если значение, присваиваемое dblResult, используется однократно, то сразу выводить его в поток, а переменную dblResult убрать;

  • return 0; можно опустить: mainвозвращает 0 по умолчанию.

Answer 2

А зачем же вы пытаетесь читать из файла, открытого на запись?
Файл после этого переходит в состояние ошибки и все дальнейшие действия с ним бессмысленны.

READ ALSO
Перегрузка оператора =

Перегрузка оператора =

В общем есть такой код перегрузки оператора в классе нужно что бы оператор при присваивании менял значение поля материалКод вроде верно...

179
LU разложение неквадратной матрицы

LU разложение неквадратной матрицы

На википедии LU разложение определено как разложение всякой матрицы в произведение двух квадратных матрицНо как тогда сделать LU разложение...

202
Считать и вывести вектор векторов

Считать и вывести вектор векторов

Считывает ввод, но не выводит вектор

238
Smack XMPP как узнать о существовании jabber-аккаунта?

Smack XMPP как узнать о существовании jabber-аккаунта?

Доброго времени суток! Мне нужно сделать валидацию jabber-аккаунта вида user@serverru Была мысль просто посылать на тестируемый аккаунт сообщение,...

183