Ошибка чтения из файла (с++)
я занималась созданием справочника нумизмата и второй пункт должен выдавать построчно то, что написано в файле, но вместо этого оно просто это пропускает (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
→ Ссылка
- Файл может не открываться, т.к. программа может не иметь доступа к соответствующей папке. Это типично для Windows 7 и выше, ввиду прав доступа к папкам.
- "c:\Users\Lenovo\Documents\A.txt" - а диск точно называется с маленькой буквы - "c"? А может он называется с большой - "C"?
- Можно попробовать поменять место расположения файла. Например, на рабочий стол - там Windows ведёт себя обычно адекватнее.
