使用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忽略(下面如何实现),它将从输入字符串中删除某些字符,并使用错误的变量存储它们。请注意,我的字符串与空格。
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
我也试图冲洗代表,没有帮助。
我的打印功能就像魅力一样,如果我从Main手动添加课程,我将获得预期的输出,因此问题绝对是CIN/Getline。
Test registered :
test id = 1, course name = History 2, test name = History 2 exam , date = 01.02.2017
我在此处说明:http://www.cplusplus.com/reference/string/string/string/getline/?kw=getLine
任何帮助将不胜感激,谢谢。
通过使用cin.ignore
,您正在与输入本身混乱。如果您想摆脱n
字符,则不必这样做!getline
将自动执行此操作。因此,只是不要使用ignore
函数,并且代码可以。这有效:
#include<iostream>
using namespace std;
int main()
{
string courseName = "";
string testName = "";
string date = "";
cout << "Enter course name: " << std::endl;
getline(std::cin, courseName);
cout << "Enter test name: " << std::endl;
getline(std::cin, testName);
cout << "Enter test date: " << std::endl;
getline(std::cin, date);
cout << courseName << endl;
cout << testName << endl;
cout << date << endl;
return 0;
}
我正在回答一个古老的问题,但是在使用所有 getline()
's之前,请尝试清除输入流。在要求输入之前,您可能在缓冲区中有一些额外的回报。
cin.clear();
cin.ignore(INT_MAX);