Есть два места, которые вы должны вставить cin.ignore
в свой код:
cout << "Enter the no. of books whose details are to be entered:" << endl;
cin >> N;
// First cin.ignore here
cin.ignore(1000, '\n');
cout << "Enter the year of publishing" << endl;
cin >> b[x].year;
// Second cin.ignore here
cin.ignore(1000, '\n');
Кроме этого, я вижу еще две проблемы в вашем коде:
#include <string>
не <string.h>
- добавить
#include <iostream>
Зачем cin.ignore
необходимо? Ожидается, что пользователь предоставит ввод с новой строкой ('\ n'). Когда используется getline
, он оставляет входной поток в таком состоянии, что следующая попытка чтения ввода из потока начнется со следующей строки. Это не верно для operator >>
. int x; cin >> x;
делает здесь только то, что читает только целое число, а не символ новой строки, присутствующий сразу после целого числа. Следовательно, следующая попытка чтения продолжится в той же строке. getline
не найдет символов перед новой строкой и, следовательно, получит пустую строку. Чтобы избежать этого и эффективно начать чтение со следующей строки, необходимо cin.ignore
.