阅读不同的输入类型C ++

时间:2013-09-12 21:57:59

标签: c++ cin

我正在尝试创建一个学生对象,其中包含名称,ID,电子邮件和三个等级整数。

我的代码非常简单,如下所示:

studentObj* newStudent = new studentObj;

cout << "Student First Name: ";
getline(cin, newStudent->name);
cout << "Student ID: ";
getline(cin, newStudent->id);
cout << "Student Email: ";
getline(cin, newStudent->email);
cout << "Grade 1: ";
cin >> newStudent->gradeOne;
cout << "Grade 2: ";
cin >> newStudent->gradeTwo;
cout << "Term Grade: ";
cin >> newStudent->termGrade;

cout << "Student Name: " + newStudent->name << endl;
cout << "Student ID: " + newStudent->id << endl;
cout << "Student Email: " + newStudent->email << endl;
cout << "Grade 1: " + newStudent->gradeOne << endl;
cout << "Grade 2: " + newStudent->gradeTwo << endl;

我认为这样可以完美运行,但不幸的是情况并非如此。这似乎是混合getline()cin

的问题

输出结果为:

Student Name: Test Tester
Student ID: abcdef
Student Email: email@test.com
rade 1:
ade 2:
m Grade: 

我尝试在几个地方添加cin.ignore(numeric_limits<streamsize>::max(),'\n');,但没有运气。有什么建议? `

2 个答案:

答案 0 :(得分:3)

你不能将字符串文字添加到整数中(好吧,你可以,但在你的情况下你不会得到任何有意义的东西 - 你会产生一个偏移 - 所以字符串输出将是rade 1:因为{{ 1}}将指向字符串文字"Grade 1" + 1)。

rade 1

答案 1 :(得分:-1)

您的studentObj::gradeOnestudentObj::gradeTwo成员是整数值。字符串文字Grade 1:的类型为char*。类型pointer + integer的表达式与pointer[integer]相同。当你尝试打印成绩时,你实际上是在生成一个指向字符串文字的指针(如果你很幸运的话)。