代码问题,求解答
2025-11-19 17:31:24
发布于:浙江
各位编程大佬好!
我在自己编写学生分数排名代码(自创,无例题)时,遇到了代码无法正常输出(输出神秘字符)的情况.
如下图:

希望有大佬帮忙解答,衷心感谢!
代码:
#include<bits/stdc++.h>
using namespace std;
struct student{
string ID;
int Chinece,Mathematics,English,science;
int Total_Score;
}a[50];
int n;
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].ID>>a[i].Chinece>>a[i].Mathematics>>a[i].English>>a[i].science;
a[i].Total_Score=a[i].Chinece+a[i].Mathematics+a[i].English+a[i].science;
if(a[i].Total_Score>a[i-1].Total_Score){
swap(a[i].Total_Score,a[i-1].Total_Score);
swap(a[i].ID,a[i-1].ID);
swap(a[i].Chinece,a[i-1].Chinece);
swap(a[i].Mathematics,a[i-1].Mathematics);
swap(a[i].English,a[i-1].English);
swap(a[i].science,a[i-1].science);
}
else if(a[i].Total_Score==a[i-1].Total_Score){
if(a[i].Chinece>a[i-1].Chinece){
swap(a[i].Total_Score,a[i-1].Total_Score);
swap(a[i].ID,a[i-1].ID);
swap(a[i].Chinece,a[i-1].Chinece);
swap(a[i].Mathematics,a[i-1].Mathematics);
swap(a[i].English,a[i-1].English);
swap(a[i].science,a[i-1].science);
}
else if(a[i].Chinece==a[i-1].Chinece){
if(a[i].Mathematics>a[i-1].Mathematics){
swap(a[i].Total_Score,a[i-1].Total_Score);
swap(a[i].ID,a[i-1].ID);
swap(a[i].Chinece,a[i-1].Chinece);
swap(a[i].Mathematics,a[i-1].Mathematics);
swap(a[i].English,a[i-1].English);
swap(a[i].science,a[i-1].science);
}
else if(a[i].Mathematics==a[i-1].Mathematics){
if(a[i].English>a[i-1].English){
swap(a[i].Total_Score,a[i-1].Total_Score);
swap(a[i].ID,a[i-1].ID);
swap(a[i].Chinece,a[i-1].Chinece);
swap(a[i].Mathematics,a[i-1].Mathematics);
swap(a[i].English,a[i-1].English);
swap(a[i].science,a[i-1].science);
}
else if(a[i].English==a[i-1].English){
if(a[i].science>a[i-1].science){
swap(a[i].Total_Score,a[i-1].Total_Score);
swap(a[i].ID,a[i-1].ID);
swap(a[i].Chinece,a[i-1].Chinece);
swap(a[i].Mathematics,a[i-1].Mathematics);
swap(a[i].English,a[i-1].English);
swap(a[i].science,a[i-1].science);
}
}
}
}
}
}
for(int i=0;i<n;i++){
cout<<i<<": "<<a[i].ID<<" "<<a[i].Total_Score<<" "<<a[i].Chinece<<" "<<a[i].Mathematics<<" "<<a[i].English<<" "<<a[i].science<<endl;
}
return 0;
}
通过咕咕咕的解答与支持,代码最终Debug完成.
最终代码:
#include<bits/stdc++.h>
using namespace std;
struct student{
string ID;
int Chinese,Mathematics,English,science;
int Total_Score;
}a[50];
int n;
void change(int x,int y){
swap(a[x].Total_Score,a[y].Total_Score);
swap(a[x].ID,a[y].ID);
swap(a[x].Chinese,a[y].Chinese);
swap(a[x].Mathematics,a[y].Mathematics);
swap(a[x].English,a[y].English);
swap(a[x].science,a[y].science);
}
int main(){
cout<<"输入学生人数:";
cin>>n;
if(n<=0){
cout<<"无效输入,程序结束";
return 0;
}
cout<<"输入学生各科分数(格式:姓名 语文分数 数学分数 英语分数 科学分数):";
cout<<"\n";
for(int i=1;i<=n;i++){
cin>>a[i].ID>>a[i].Chinese>>a[i].Mathematics>>a[i].English>>a[i].science;
a[i].Total_Score=a[i].Chinese+a[i].Mathematics+a[i].English+a[i].science;
}
for(int i=1;i<=n;i++){
if(n==1){
cout<<"第"<<i<<"名:\n"<<"姓名:"<<a[i].ID<<"\n"<<"总分:"<<a[i].Total_Score<<"\n"<<"语文分数:"<<a[i].Chinese<<"\n";
cout<<"数学分数:"<<a[i].Mathematics<<"\n"<<"英语分数:"<<a[i].English<<"\n"<<"科学分数:"<<a[i].science;
return 0;
}
if(a[i].Total_Score>a[i+1].Total_Score&&i!=n){
change(i,i+1);
}
else if(a[i].Total_Score==a[i+1].Total_Score&&i!=n){
if(a[i].Chinese>a[i+1].Chinese&&i!=n){
change(i,i+1);
}
else if(a[i].Chinese==a[i+1].Chinese&&i!=n){
if(a[i].Mathematics>a[i+1].Mathematics&&i!=n){
change(i,i+1);
}
else if(a[i].Mathematics==a[i+1].Mathematics&&i!=n){
if(a[i].English>a[i+1].English&&i!=n){
change(i,i+1);
}
else if(a[i].English==a[i+1].English&&i!=n){
if(a[i].science>a[i+1].science&&i!=n){
change(i,i+1);
}
}
}
}
}
if(i==n){
if(a[i].Total_Score>a[1].Total_Score){
change(i,1);
}
else if(a[i].Total_Score==a[1].Total_Score){
if(a[i].Mathematics>a[1].Mathematics){
change(i,1);
}
else if(a[i].Mathematics==a[1].Mathematics){
if(a[i].English>a[1].English){
change(i,1);
}
else if(a[i].English==a[1].English){
if(a[i].science>a[1].science){
change(i,1);
}
}
}
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i].Total_Score>a[j].Total_Score) change(i,j);
}
}
for(int i=1;i<=n;i++){
cout<<"第"<<i<<"名:\n"<<"姓名:"<<a[i].ID<<"\n"<<"总分:"<<a[i].Total_Score<<"\n"<<"语文分数:"<<a[i].Chinese<<"\n";
cout<<"数学分数:"<<a[i].Mathematics<<"\n"<<"英语分数:"<<a[i].English<<"\n"<<"科学分数:"<<a[i].science;
cout<<"\n\n\n";
}
return 0;
}
最终帮助人:咕咕咕
小彩蛋:最终代码91行(不信你复制)
全部评论 2
我是慕温,走遍ACGO所有灌水帖(不喜可删)
2025-11-06 来自 浙江
0可以给一下对应的输入吗,我看不出问题qaq
2025-11-02 来自 江西
0输入:
1
chengcheng 97 98 99 1002025-11-03 来自 浙江
0我知道了,当 i = 0 时,访问a[i - 1]是未定义行为,因此会输出乱码
2025-11-03 来自 江西
0%%%
2025-11-03 来自 上海
0



















有帮助,赞一个