首先,我會公開承認這是一項家庭作業。這就是說,我的代碼非常接近,並希望在正確的方向推動。使用Swap函數對類對象數組進行排序後的重複項 - C++
提示: 編寫一個完整的程序,從標準輸入中讀取學生數據,按姓氏/名字排序,然後將結果打印到標準輸出。學生數據由姓氏,名字和成績平均值(浮點值)組成。你應該假設不超過50名學生。
輸入樣例:
潔具亨利87.2 丹特斯愛德蒙91.4 埃爾哈特阿梅利亞92.6
我的代碼接受用戶輸入,交換他們基於姓氏,然後第一個名稱,並輸出學生名單和GPA。測試我的代碼的在線程序輸入六(6)個學生數據。它使用Swap對它們進行正確分類,但第五名學生在第5-49項(50分之外)中重複,然後才輸出學生6.我搜索了論壇,但沒有發現以前的帖子適用。
我試過在輸出循環中使用'while'語句,但是我對布爾值的理解仍然有點弱。嘗試while語句列在我的代碼的頂部。任何援助將不勝感激。
while((list[i].lastName != list[i + 1].lastName) && (list[i].firstName != list[i + 1].firstName))
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
class student
{
public:
string firstName;
string lastName;
float gpa;
student() {};
student(string last, string first, double grade)
{
firstName = first;
lastName = last;
gpa = grade;
};
};
int main()
{
string first;
string last;
float grade;
student list[50];
for(int i = 0; i < 50; i++)
{
cin >> last;
cin >> first;
cin >> grade;
list[i].lastName = last;
list[i].firstName = first;
list[i].gpa = grade;
}
for (int i = 0; i < 50 - 1; i++)
{
if (list[i].lastName > list[i + 1].lastName)
{
swap (list[i], list[i+1]);
}
}
for (int i = 0; i < 50 - 1; i++)
{
if (list[i].firstName > list[i + 1].firstName)
{
swap (list[i], list[i+1]);
}
}
for(int i = 0; i < 50 - 1; i++)
{
cout << list[i].lastName << " " << list[i].firstName << " " << list[i].gpa << endl;
}
return 0;
}
您正試圖從輸入中正好讀取50個條目,並且沒有檢查任何I/O錯誤。一旦達到文件結尾,所有這些'>>'操作符都會失敗 - 但是您不會注意到這一點,並插入一個條目,其中包含最後保存的三個變量的值。這就是你最終得到44份同一學生數據的副本。 –