cin 跳过一行

cin is skipping a line

这是我正在处理的一段代码:

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":

如何解决此问题以便我可以输入标题?

我想你之前有一些意见,但你没有给我们看。假设您这样做了,您可以使用 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: ";

现在应该可以了。

getline 是换行符分隔的。但是,使用 std::cin 之类的内容进行阅读会在输入流中留下换行符。正如 this 建议的那样,当从空格分隔输入切换到换行分隔输入时,您希望通过执行 cin.ignore 清除输入流中的所有换行符:例如,cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');。 (当然,我假设您在将代码提炼成 MCVE 时在 getline 之前遗漏了 cin