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
。
这是我正在处理的一段代码:
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
。