【发布时间】:2018-02-22 14:03:55
【问题描述】:
使用 c++14。我已经阅读了很多关于这个问题的帖子。
如果我在下面运行此代码,它会跳过 getline 行。
#include <iostream>
#include "main_menu.h"
void MainMenu::AddTest()
{
std::string courseName = "";
std::string testName = "";
std::string date = "";
std::cout << "Enter course name: " << std::endl;
std::getline(std::cin, courseName);
std::cout << "Enter test name: " << std::endl;
std::getline(std::cin, testName);
std::cout << "Enter test date: " << std::endl;
std::getline(std::cin, date);
Test test(courseName, testName, date);
tests.Add(test);
std::cout << "Test registered : " << std::endl;
tests.Print(test.id);
}
如果我在每个 getline 行之后添加 cin ignore(下面是我如何实现它的示例),它会从输入字符串中删除一些字符并使用错误的变量来存储它们。请注意,我有带空格的字符串。
std::getline(std::cin, courseName);
std::cin.ignore();
这是我得到的:
Enter course name:
History 2
Enter test name:
History 2 exam
Enter test date:
2017.01.02
Test registered :
test id = 2, course name = , test name = istory 2, date = istory 2 exam
我也试过冲洗 cout,没有帮助。
我的打印功能就像一个魅力,如果我从 main 手动添加课程,我会得到预期的输出,所以问题肯定是 cin / getline。
Test registered :
test id = 1, course name = History 2, test name = History 2 exam , date = 01.02.2017
我使用 getline,如下所述:http://www.cplusplus.com/reference/string/string/getline/?kw=getline
任何帮助将不胜感激,谢谢。
【问题讨论】: