Пустой вывод в динамической структуре c++\cpp

Рейтинг: 0Ответов: 1Опубликовано: 05.06.2023

по непонятной мне причине ничего не выводится в консоль. Задача программы вывести в консоль данные из файла которые попадут в одну из вилок введеных с клавиатуры года или бюджета. Сам файл https://drive.google.com/file/d/1FZ1RvPpdW_H64iWF6H2Q9IOuik6Bno60/view?usp=sharing помогите пожалуйста

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <locale>
#include <iomanip>

using namespace std;

struct Film {
    string title;
    int year;
    string director;
    double budget;
    string language;
};

int main() {
    system("color F0");
    setlocale(LC_ALL, "ru");

    ifstream file("input.txt");
    if (!file.is_open()) {
        cerr << "Ошибка при открытии файла!" << endl;
        return 1;
    }

    vector<Film> films;
    Film temp;

    while (file >> temp.title >> temp.year >> temp.director >> temp.budget >> temp.language) {
        films.push_back(temp);
    }

    file.close();

    int year_min, year_max;
    double budget_min, budget_max;
    cout << "Введите минимальный и максимальный год: ";
    cin >> year_min >> year_max;
    cout << "Введите минимальный и максимальный бюджет: ";
    cin >> budget_min >> budget_max;

    cout << "Список фильмов, удовлетворяющих условиям: " << endl;
    bool found = false;  
    for (const auto& film : films) {
        if ((year_min <= film.year && film.year <= year_max) || (budget_min <= film.budget && film.budget <= budget_max)) {
            cout << setw(10) << left << film.title
                << setw(6) << left << film.year
                << setw(15) << left << film.director
                << setw(10) << left << film.budget
                << setw(5) << left << film.language << endl;
            found = true;  
        }
    }

    if (!found) {
        cout << "Нет фильмов, удовлетворяющих условиям." << endl;
    }

    return 0;
}

Ответы

▲ 1Принят

У вас на строке заголовка, где нет никаких целых чисел, чтение

file >> temp.title >> temp.year >> temp.director >> temp.budget >> temp.language

просто слетит, поток перейдет в состояние fail, и никакого дальнейшего чтения просто не будет...

Кроме того, название Фильм # состоит из двух слов, так что если бы вы добрались до чтения названия, то

file >> temp.title

прочтет "Фильм", а номер уже будет читать в

>> temp.year

Ну, а после исправления этих ошибок могут встать вопросы с кодировками, но это уже второй вопрос...