Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2013, 12:46   #1
Mostransformer
Пользователь
 
Регистрация: 11.01.2012
Сообщений: 15
По умолчанию Fstream не закрывает файл

Здравствуйте. Пишу эдакий помощник покупок зданий для игры Monster Warlord (использую Codeblocks::MinGw). Там каждое здание стоит определенную цену, и приносит определенный доход. Так вот программа вычисляет максимально выгодное вложения. С каждой покупкой цена дома увеличивается на 10% от начальной стоимости. Имеется также ТХТ файл, в котором хранится информация о кол-ве уже купленных зданий, начальной цене, дохода и прироста цены.

Программа:

Код:
#include<iostream>
#include<fstream>
#include"windows.h"

using namespace std;

int main()
{
    unsigned int lvl;
    cout<<"Level: ";
    cin>>lvl;
    unsigned long long money;
    cout<<"Money: ";
    cin>>money;

    int buildings = 14; //////////////////////////////Из-за этой переменной


    int* building;
    int* incomeUp;
    int* priceUp;
    int* startPrice;
    int* price;
    int* build;
    unsigned int income = 0;

    building = new int[buildings];
    incomeUp = new int[buildings];
    priceUp = new int[buildings];
    startPrice = new int[buildings];
    price = new int[buildings];
    build = new int[buildings];

    ifstream iFile ("14. MWB_DTB.txt");
    for(int i = 1; i<=17; i++)
    {
        iFile>>building[i]>>incomeUp[i]>>startPrice[i]>>priceUp[i];
        price[i]=startPrice[i];
        price[i]+=building[i]*priceUp[i];
        build[i] = 0;
    }
    iFile.close();    /////////////////////////////////На этом месте вылетает

    bool exit = false;
    while (!exit)
    {
        int bstChng = 0;
        float KPD = 999999999;

        for(int i = 1; i<=buildings; i++)
        {
            float KPDi = price[i]/incomeUp[i];
            if(KPDi<KPD && money>=price[i])
            {
                bstChng = i;
                KPD=KPDi;
            }
        }

        if(bstChng == 0) exit = true;
        else
        {
            money-=price[bstChng];
            price[bstChng]+=priceUp[bstChng];
            income+=incomeUp[bstChng];
            build[bstChng]+=1;
        }
    }

    cout<<"Income: "<<income<<endl<<"-----------------------------------------------------------\n";
    for(int i = 1; i<=buildings; i++) cout<<i<<" to buy: \t"<<build[i]<<endl;

    ofstream oFile("14. MWB_DTB.txt");
    for(int i = 1; i <= 17; i++)
    {
        oFile<<build[i]+building[i]<<"\t"<<incomeUp[i]<<"\t"<<startPrice[i]<<"\t"<<priceUp[i]<<endl;
    }
    oFile<<"\ncount\tincome\tprice\tprice_up";
    oFile.close();

    system("pause");
    return 0;
}
ТХТ файл:

Код:
0	1 	40	4
0	5	200	20
0	10	400	40
0	50	2000	200
0	100	5000	500
0	160	11000	1100
0	500	40000	4000
0	1000	100000	10000
0	1600	200000	20000
0	2500	400000	40000
0	3000	750000	75000
0	3500	1000000	100000
0	3800	1500000	150000
0	4000	2500000	250000
0	4500	3000000	300000
0	5000	4000000	400000
0	6000	5000000	500000

count	income	price	price_up
И проблема в том, что программа вылетает на месте закрытия файла, если переменная buildings < 15, хотя от нее там ничего практически не зависит.
Вложения
Тип файла: txt 14. MWB_DTB.txt (353 байт, 133 просмотров)
Mostransformer вне форума Ответить с цитированием
Старый 26.09.2013, 13:49   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Mostransformer
Цитата:
int buildings = 14;
...
building = new int[buildings];
...
for(int i = 1; i<=17; i++) {
iFile>>building[i]>>incomeUp[i]>>startPrice[i]>>priceUp[i];
...
}
дальше не смотрел
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 26.09.2013, 14:20   #3
Mostransformer
Пользователь
 
Регистрация: 11.01.2012
Сообщений: 15
По умолчанию

Это сообщение несет адекватный смысл?
Mostransformer вне форума Ответить с цитированием
Старый 26.09.2013, 14:37   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от Mostransformer Посмотреть сообщение
Это сообщение несет адекватный смысл?
Угу... Перечитайте адресацию массивов в С а также задайтесь вопросом о разнице между 14 и 17
waleri вне форума Ответить с цитированием
Старый 26.09.2013, 15:00   #5
Mostransformer
Пользователь
 
Регистрация: 11.01.2012
Сообщений: 15
По умолчанию

Большое спасибо, уважаемые знатоки. Вопрос закрыт.
Mostransformer вне форума Ответить с цитированием
Старый 07.11.2013, 12:06   #6
Mostransformer
Пользователь
 
Регистрация: 11.01.2012
Сообщений: 15
По умолчанию

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

Код:
ifstream iFile("input.txt");
    int cities,roads,death;
    iFile>>cities>>roads>>death;
    vampires = new int[cities];
    distanc = new int[cities];
    paths = new int[roads];
    for(int i = 1; i <= cities; i++) iFile>>vampires[i];
    net = new int[roads*2];
    for(int i = 1; i <= roads*2; i++)
    {
        iFile>>net[i];
        i++;
        iFile>>net[i];
    }
    int city_war, wolfs;
    iFile>>city_war>>wolfs;
    iFile.close();
Если перед iFile.close() поставить cout<<2, то он выводит 2, а вот если после то уже не выводит.
Mostransformer вне форума Ответить с цитированием
Старый 07.11.2013, 12:11   #7
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

отладчиком пройдись.
И в первом вопросе отладчик тоже должен был помочь.
rrrFer вне форума Ответить с цитированием
Старый 07.11.2013, 12:23   #8
Mostransformer
Пользователь
 
Регистрация: 11.01.2012
Сообщений: 15
По умолчанию

А что делать, если отладчик (как я понял это дебаггер т.к. раньше я не пользовался им) прогу нормально пробивает, а вот если уже запускать компилированный файл, то ошибка?
Mostransformer вне форума Ответить с цитированием
Старый 07.11.2013, 12:41   #9
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Код:
net = new int[roads*2];
    for(int i = 1; i <= roads*2; i++)
    {
        iFile>>net[i];
дальше не смотрел :D
Rififi вне форума Ответить с цитированием
Старый 07.11.2013, 12:44   #10
Mostransformer
Пользователь
 
Регистрация: 11.01.2012
Сообщений: 15
По умолчанию

Это сообщение несет адекватный смысл?
Mostransformer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
fstream и русский ввод в файл Mostransformer Общие вопросы C/C++ 3 03.03.2013 13:57
fstream, файл не открывается Arantir# Помощь студентам 8 21.01.2013 19:04
fstream - не создает файл apeorin Общие вопросы C/C++ 5 01.12.2012 16:32
Не открывается текстовый файл для чтения (использовал fstream.h) ichigo9911 Общие вопросы C/C++ 7 13.03.2012 11:39
JLabel закрывает Jmenu Doda Общие вопросы по Java, Java SE, Kotlin 1 02.03.2009 14:23