Программа должна создать выходной файл с результатами, но в этом файле ничего нет - PullRequest
0 голосов
/ 07 июня 2019

Мой код создает файл «output.txt», но он ничего не выводит в файл.

В идеале он должен читать текстовый файл, например

Игры 2300.00 1000.00

Сладости 1500,00 900,00

Музыка 1500,00 1000,00

Напитки 3000,00 2000,00

XXXXXX

и вывод

Отчет в порядке убываниядоходов -

Игры 1300

Напитки 1000

Сладости 600

Музыка 500

Статистика: -

Количество киосков: 4

Количество киосков, которые принесли прибыль: 4

Общая прибыль от всех киосков: 3400

Киоски с прибылью: Music Sweets Drinks Games

#include <iostream>
#include <fstream> // for file streaming

using namespace std;


int main()
{


    ifstream f; // this is a input file object
    f.open("stalls.txt"); // open file with the f object

    ofstream of; // this is a output file object
    of.open("output.txt"); // open file "output.txt" with the of object

    while (loop) {
        f >> tmp.name; // read from the file

        if (tmp.name == "xxxxxx") {
            loop = false;
            continue;
        }

Если кто-нибудь может сказать мне, что я делаю неправильно и почему в моем файле output.txt ничего нет, я был бы признателен за это

Ответы [ 2 ]

1 голос
/ 07 июня 2019

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

Исправьте это, и все будет в порядке.Но я бы посоветовал вам проверить EOF, а не использовать «xxxxxx» для пометки EOF.Чтобы сделать это, вы ничего не ставите, чтобы отметить конец вашего входного файла и напишите входные данные while, например:

while (f >> tmp.name) {
  if (tmp.name == "xxxxxx") {
    loop = false;
    continue;
  }

  f >> tmp.income; // read income from the file
  f >> tmp.expenses; // read expenses from the file

  tmp.net = tmp.income - tmp.expenses;
  tprofit_loss += tmp.net;

  Stalls[n] = tmp;

  n++;
}
0 голосов
/ 07 июня 2019

Проблема в линии Stalls[n] = tmp. Программа прерывается, когда n достигает 100, а Stalls может идти только от 0 до 99. Поэтому вам нужно условие, чтобы разорвать цикл. Что-то вроде

if(n >= 100){
    break;
}

А также как Фейсал Рахман Аваш , вы проверяете нижний регистр x вместо верхнего регистра X, что является основной причиной, по которой n выходит за границы.

...