Вот фрагмент кода, над которым я работаю:

std::cout << "Enter title of book: ";
std::string title;
std::getline(std::cin, title);
std::cout << "Enter author's name: ";
std::string author;
std::getline(std::cin, author);
std::cout << "Enter publishing year: ";
int pub;
std::cin >> pub;
std::cout << "Enter number of copies: ";
int copies;
std::cin >> copies;

Вот результат работы этого раздела (добавлены кавычки):

"Enter title of book: Enter author's name":

Как мне это исправить, чтобы я мог ввести заголовок?

-1
Ricca 29 Окт 2015 в 01:37

2 ответа

Лучший ответ

Я думаю, у вас есть какие-то материалы, которые вы нам не показываете. Предполагая, что вы это делаете, вы можете использовать std::cin.ignore(), чтобы игнорировать любые символы новой строки, оставшиеся от std::cin.

  std::string myInput;
  std::cin >> myInput; // this is some input you never included.
  std::cin.ignore(); // this will ignore \n that std::cin >> myInput left if you pressed enter.

  std::cout << "Enter title of book: ";
  std::string title;
  std::getline(std::cin, title);
  std::cout << "Enter author's name: ";

Теперь должно работать.

1
Linus 28 Окт 2015 в 22:44

getline разделяется новой строкой. Однако чтение с чем-то вроде std::cin оставляет новую строку во входном потоке. Как это рекомендует, при переключении с ввода с разделителями пробелами на ввод с разделителями новой строки вы хотите очистить все символы новой строки из входного потока, выполнив cin.ignore: например, cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');. (Конечно, я предполагаю, что вы упустили cin перед getline при преобразовании кода в MCVE).

0
Pradhan 28 Окт 2015 в 22:47