Ошибка чтения из файла (с++)

я занималась созданием справочника нумизмата и второй пункт должен выдавать построчно то, что написано в файле, но вместо этого оно просто это пропускает (case 2). Hе знаю, как это решить

#include <string.h>
#include <string>
#include <fstream>//file
#include <cstdlib>//exit
#include <iostream>
using std::string;
using namespace std;

/*class Collectioner {
    string Name;
    string Country;
    string Coordinates;
    string NalichieMonet;
public:
    void SetName(string name) {//setter
        Name = name;
    }
    string getName() {//getter
        return Name;
    }
    void SetCountry(string country) {
        Country = country;
    }
    string getCountry() {
        return Country;
    }
    void SetCoordinates(string coordinates) {
        Coordinates = coordinates;
    }
    string getCoordinates() {
        return Coordinates;
    }
    void SetNalichieMonet(string nalichieMonet) {
        NalichieMonet = nalichieMonet;
    }
    string getNalichieMonet() {
        return NalichieMonet;
    }

    Collectioner(string name, string country, string coordinates, string nalichieMonet) {
        Name = name;
        Country = country;
        Coordinates = coordinates;
        NalichieMonet = nalichieMonet;
    }
}; */

class Coin {
    string Country;
    int God;
    int Kolvo_monet;
    int Nominal;
    string Osobennosti;
public:
    void SetNominal(int nominal) {//setter
        Nominal = nominal;
    }
    int getNominal() {//getter
        return Nominal;
    }
    void SetGod(int god) {
        God = god;
    }
    int getGod() {
        return God;
    }
    void SetKolvo_monet(int kolvo_monet) {
        Kolvo_monet = kolvo_monet;
    }
    int getKolvo_monet() {
        return Kolvo_monet;
    }
    void SetCountry(string country) {
        Country = country;
    }
    string getCountry() {
        return Country;
    }
    void SetOsobennosti(string osobennosti) {
        Osobennosti = osobennosti;
    }
    string getOsobennosti() {
        return Osobennosti;
    }

    void Introducing(int k) {
        cout << "---------" << endl;
        cout << "Монета №" << k << endl;
        cout << "Страна - " << Country << endl;
        cout << "Номинал - " << Nominal << endl;
        cout << "Год выпуска - " << God << endl;
        cout << "Особенности - " << Osobennosti << endl;
        cout << "Количество выпущенных монет - " << Kolvo_monet << endl;
        cout << "---------" << endl;
        k++;
    }

    Coin(string country, int nominal, int god, string osobennosti, int kolvo_monet) {
        Nominal = nominal;
        Country = country;
        Kolvo_monet = kolvo_monet;
        Osobennosti = osobennosti;
        God = god;
    }
};

void print_menu() {
    cout << endl;
    cout << "Выберите вариант:\n" << endl;
    cout << "1. Информация о монетах\n"
        << "2. Информация о коллекционерах\n"
        << "3. Своя коллекция\n"
        << "4. Выйти\n" << endl;
}
int get_variant(int k) {
    int variant;
    cin >> variant;
    while (variant<1 || variant>k) {
        cout << "Неверный ввод. Попробуйте снова!" << endl;
        cin >> variant;
    }
    cout << endl;
    return variant;
}

int main() {
    setlocale(LC_ALL, "Russian");
    string ex; // сюда будем класть считанные строки
    ifstream file;
    file.open("c:\\Users\\Lenovo\\Documents\\A.txt", ios::in); // файл из которого читаем
    int n, y;
    int a = 1;
    char x[30];
    Coin coin1 = Coin("Украина", 5, 1993, "Редкая", 100);
    Coin coin2 = Coin("Россия", 20, 1989, "Регулярная", 500);
    Coin coin3 = Coin("Бельгия", 50, 1999, "Ценная", 200);
    Coin coin4 = Coin("Чехия", 100, 1998, "Юбилейная", 10);
    /*Collectioner collectioner1 = Collectioner("Иван", "Австралия", "432.652.218", "Да");
    Collectioner collectioner2 = Collectioner("Святослав", "Чехия", "532.3512.918", "Нет");
    Collectioner collectioner3 = Collectioner("Кристина", "Швеция", "564.821.583", "Нет");
    Collectioner collectioner4 = Collectioner("Василий", "Монако", "658.432.908", "Да");*/
    int variant;
    do {
        print_menu();
        variant = get_variant(4);
        switch (variant) {
        case 1:
            cout << "Сбор информации о монетах..." << endl;
            cout << endl;
            coin1.Introducing(1);
            coin2.Introducing(2);
            coin3.Introducing(3);
            coin4.Introducing(4);
            break;
        case 2:
            cout << "Сбор информации о коллекционерах..." << endl;
            cout << endl;
            /*collectioner1.Introduce(1);
            collectioner2.Introduce(2);
            collectioner3.Introduce(3);
            collectioner4.Introduce(4);*/
            while (getline(file, ex)) { // пока не достигнут конец файла, класть очередную строку в переменную (s)
                cout << ex << endl; // выводим на экран
            }
            break;
        case 3:
            cout << "Введите информацию о своей коллекции: " << endl;
            cout << endl;
            cout << "Сколько монет в коллекции вы имеете? " << endl;
            cout << endl;
            cin >> n;
            cout << endl;
            for (int i = 0; i < n; i++) {
                cout << a << " монета: " << endl;
                cout << endl;
                cout << "Введите год выпуска: ";
                cin >> y;
                while (y < 1900 || y >= 2021) {
                    cout << "Неверный ввод. Попробуйте снова!" << endl;
                    cin >> y;
                }
                cout << endl;
                cout << "Введите страну: ";
                cin >> x;
                cout << endl;
                cout << "Введите номинал монеты: ";
                cin >> y;
                while (y < 1) {
                    cout << "Неверный ввод. Попробуйте снова!" << endl;
                    cin >> y;
                }
                cout << endl;
                cout << "Введите особенности монеты: ";
                cin >> x;
                cout << endl;
                a++;
            }
            break;
        case 4:
            cout << "Выход из программы" << endl;
            exit(EXIT_SUCCESS);
            break;
        }
        if (variant != 4) {
            system("pause");
        }
    } while (variant != 4);
    file.close();
    return 0;
}

при выборе второго варианта должно воспроизводиться построчное чтение из файла


Ответы (1 шт):

Автор решения: VladimirS
  1. Файл может не открываться, т.к. программа может не иметь доступа к соответствующей папке. Это типично для Windows 7 и выше, ввиду прав доступа к папкам.
  2. "c:\Users\Lenovo\Documents\A.txt" - а диск точно называется с маленькой буквы - "c"? А может он называется с большой - "C"?
  3. Можно попробовать поменять место расположения файла. Например, на рабочий стол - там Windows ведёт себя обычно адекватнее.
→ Ссылка