Запустите программу, сохраните данные в текстовом файле и прочитайте их обратно

0

По какой-то причине (неизвестно мне как новичок C++) моя программа испытывает проблемы при выводе данных в текстовый файл. Короче:

Я работаю над программой Game of Life, где один из параметров меню должен показывать статистику игры. Программа должна запускаться, отправлять данные в текстовый файл, а затем, когда я вызываю его обратно в меню, я получаю статистические данные на экране.

Статистика представляет собой не что иное, как текстовый файл, показывающий "номер поколения" и "количество живых клеток". Он будет сохранен в текстовом файле, например: (без точек)

  1. 30
  2. 41
  3. 49
  4. 52

Идея, как и выше, начинается с поколения 1, но моя программа начинается в 909 году. Большой вопрос: почему?

  1. 41
  2. 49
  3. 52

Остальная часть программы, включая другие параметры меню, отлично работает без предупреждений. Я использую CodeBlocks + Ubuntu.

Любая помощь действительно ценится!

(...)

void world::statistics(){

int statsmenuchoice();
int alivecells;
int generation();
int i,j;
void displayItems(int x);
void getItems();

// write to file
ofstream worldFile;
   worldFile.open("stats.txt");

    for (int generation; generation < MAX; generation++){
        one();
        alivecells = 0;
    for (i=0; i<MAX; i++) {
        for (j=0; j<MAX; j++) {

            if (population[i][j]) alivecells++;}}{
      worldFile << generation << ' ' << alivecells << ' ' << endl;
            }
       } 

   worldFile.close();

// read from file and print on screen
    int statsmenuoption;
    printf("\033[0m\033[2J\033[H"); // empty screen in terminal
    statsmenuoption = statsmenuchoice();

    while(statsmenuoption != 2){ // return to menu
        switch(statsmenuoption){
        case 1:
            displayItems(1); break;
        } 
            statsmenuoption = statsmenuchoice();
    } 
    }


// statistics (sub)menu function
int statsmenuchoice(){
    int choice;

    cout << endl << " Choose 1 for Statistics or 2 for mainmenu: " << endl;
    cout << endl << " 1 :: show statistics" << endl;
    cout << " 2 :: back to (main)menu" << endl << endl;

    cin >> choice;
    return choice;
}

// display items function
void displayItems(int x){

    ifstream worldFile("stats.txt");
    int generation;
    int alivecells;
    printf("\033[0m\033[2J\033[H");
    if(x==1){
        while(alivecells >> generation >> alivecells){
                if(alivecells>0){
            cout << generation << ' ' << alivecells << ' ' << endl;
                } 
        } 
    } 

} // world::statistics

(...)
  • 0
    Эта строка кажется ненужной, пожалуйста, удалите ее: int generation(); ,
  • 0
    Скомпилировали ли вы свою программу с включенными предупреждениями ( g++ -W -Wall -Wextra -Werror ) и исправили ли вы все предупреждения перед тем, как задавать свой вопрос в StackOverflow? Если нет, пожалуйста, сделайте это, потому что, возможно, компилятор уже скажет вам, что делать, поэтому вам не нужно спрашивать. Если вы не знаете, что означает конкретное предупреждение и как его исправить, задайте это как вопрос.
Теги:
text-files

1 ответ

0
Лучший ответ

Добавьте значение = 0, поэтому строка будет:

for (int generation = 0; generation < MAX; generation++){
  • 0
    Оно работает! Спасибо большое за помощь. Со вчерашнего дня я искал это. Вы сделали мой день!
  • 0
    Если мой ответ помог вам решить проблему, нажмите на зеленую галочку слева от ответа, чтобы принять ее.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню