0

名前、ID、電子メール、および整数である 3 つの成績を取る学生オブジェクトを作成しようとしています。

私のコードは非常に単純で、次のとおりです。

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');ましたが、うまくいきません。助言がありますか?`

4

2 に答える 2

3

整数に文字列リテラルを追加することはできません(まあ、できますが、あなたの場合、意味のあるものは何も得られません-オフセットを作成します-したがって、文字列出力は文字列リテラルを指すrade 1:ためです)。"Grade 1" + 1rade 1

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;
于 2013-09-12T22:03:24.513 に答える
-1

あなたstudentObj::gradeOnestudentObj::gradeTwoメンバーは整数値です。文字列リテラルのGrade 1:型はchar*です。type の式pointer + integerは と同じpointer[integer]です。グレードを出力しようとすると、実際には文字列リテラルへのポインターが生成されます (運が良ければ)。

于 2013-09-12T22:05:40.677 に答える