Проблема с чтением целых чисел из текстового файла в массив - PullRequest
0 голосов
/ 23 апреля 2020

Я работаю над базой данных mov ie, которая позволяет пользователям вводить фильмы с заголовком, режиссером и годом выпуска. Затем база данных сохраняет все 3 входных данных в виде 2 строк (заголовок и директор) и 1 int-значения (RY) для года выпуска и сохраняет их все вместе в 1 текстовом файле. Тем не менее, я хочу отсортировать фильмы от самого нового года до самого старого года, но когда мы хотим прочитать целое число из текстового файла в массив, метод сортировки ничего не делает, кроме распечатки фильмов в том же порядке, который вводит пользователь их. Есть ли способ положить целые числа из текстового файла в массив вместе? Ниже приведен метод сортировки. Количество фильмов, которые мы хотим в базе данных, составляет 7.

void sort()
{
    string Title;
    string fileName;
    string Director;
    int RY;

    int array [7] = { };
    int temp;
    int p;

    fstream file("directory.txt");

    for(int i = 0; i < 7; ++i)
    {
        file >> array[i];
    }

    for (int i = 1; i < sizeof(array); i++) {
    temp = array[i]; //temp = 3
    p = i -1; // p = 1
    while( p >=0 && array[p] > temp){
        array [p + 1] = array [p];
        p = p-1; //p = 0
    }
    array [p + 1] = temp;
}


        for (int i = 7 - 1; i >= 0; i--)
            cout << array[i];

        cout << "Entire Movie database" << endl;
        cout << "------------------------" << endl;
        ifstream dir("directory.txt");
        while (dir >> Title >> Director >> RY){
            cout << Title << ' ' << Director << ' ' << RY << endl;
        }

        main();
    }

1 Ответ

0 голосов
/ 23 апреля 2020

Ваша пользовательская процедура сортировки (вероятно) делает все, что должна: она сортирует целые числа в вашем array. Следующий код просто читает содержимое вашего файла и выводит в следующем порядке:

    ifstream dir("directory.txt");
    while (dir >> Title >> Director >> RY){
        cout << Title << ' ' << Director << ' ' << RY << endl;
    }

Интересно, как вы ожидаете прочитать 7 целых чисел из файла в первый раз и прочитать все четыре поля для второй. Может быть, вы думаете, что значения строк будут пропущены? Они не будут

В вашем коде есть другие проблемы. Например, sizeof(array) возвращает не количество элементов, а размер в байтах. Еще одна вещь: почему вы звоните main из вашей функции sort?

Почему вы изобретаете колесо? Считайте значения в структуру, сохраните их в векторе, затем используйте процедуру std::sort.

...