請問各位大佬輸出的亂碼是怎么回事,還有比較兩組平均分大小后怎么交換?




uj5u.com熱心網友回復:
有亂碼是英文你定義的結構體有問題呀 char english[1] 你保存了一個字符A B C D 對于字符陣列來說 必須要保證陣列最后一位為'\0'的 所以你需要改為char english[2] 或者直接char c就行; 后者吧 下面使用的時候直接==比較就行了不需要strcmp
此外 應為你要輸入資料 所以a[5]結構體初始化就行 不需要賦值
再者 你21行for回圈只有4個了 漏了一個學生
最后 你的回圈沒啥用 你只是回圈了ave這個陣列 但是這個陣列和你學生的陣列有關聯嗎? 這個陣列中順序即使排好了 你知道哪個平均分是哪個學生的嗎?
建議多思考思考
以下代碼供參考
#include <iostream>
using namespace std;
typedef struct student
{
char name[10];
int id;
char english;
int math;
int ave;
} STUDENT;
STUDENT a[5] = {0};
int main()
{
int i, j;
for (i = 0; i < 5; i++)
cin >> a[i].name >> a[i].id >> a[i].english >> a[i].math;
cout << endl;
for (i = 0; i < 5; i++)
{
switch (a[i].english)
{
case 'A':
a[i].ave = (90 + a[i].math) / 2;
break;
case 'B':
a[i].ave = (80 + a[i].math) / 2;
break;
case 'C':
a[i].ave = (70 + a[i].math) / 2;
break;
case 'D':
a[i].ave = (60 + a[i].math) / 2;
break;
}
}
for (i = 0; i < 5; i++)
{
cout << a[i].name << " " << a[i].id << " " << a[i].english << " " << a[i].math << endl;
}
cout << endl;
STUDENT tmp;
for (i = 0; i < 5; i++)
{
for (j = i + 1; j < 5; j++)
{
if (a[i].ave > a[j].ave)
{
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
for (i = 0; i < 5; i++)
{
cout << a[i].name << " " << a[i].id << " " << a[i].english << " " << a[i].math << " " << a[i].ave << endl;
}
}
uj5u.com熱心網友回復:
終于懂了 謝謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/226735.html
標籤:新手樂園
