这是一个请求和打印一些信息的小程序。问题点是存储可能包含空格的名称。我的问题是,当达到Enter your name
时,它会快速移至Enter your total marks
,而不会让用户输入名称。为什么会这样?
#include <iostream>
using namespace std;
class StudentInformation {
protected:
int studentID;
string studentName;
int totalMarks;
public:
void input() {
cout << "Enter your student id number: ";
cin >> studentID;
cout << "Enter your name: ";
getline(cin, studentName);
cout << "Enter your total marks";
cin >> totalMarks;
}
void show() {
cout << "Student ID: " << studentID << endl;
cout << "Student Name: " << studentName << endl;
cout << "Total Marks: " << totalMarks << endl;
}
};
int main()
{
cout << "Hello World!" << endl;
StudentInformation stdinfo;
stdinfo.input();
stdinfo.show();
return 0;
}
答案 0 :(得分:3)
将cin >>
与getline
混合使用会导致问题。
cin >> studentID
将换行符保留在流中。getline
直接看到了这一点,所以不要等待新的输入。我更喜欢使用getline
从实际流中读取数据,然后使用stringstream
进行格式化提取。
或者在getline
之前使用ignore
:
std::cin >> ...; // leaves trailing whitespace and newline
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // eat next newline
std::getline(std::cin, ...);
答案 1 :(得分:0)
只需使用 cin.getline(studentName, size)