【发布时间】:2017-01-07 19:02:34
【问题描述】:
好的,所以我正在编写一个程序,我必须输入 n 个学生的姓名、名字和成绩。完成后,我必须按字母顺序排列它们,如果名称匹配,则在第一个之后名字。然后我有另一个选项来按成绩排序。这是我到目前为止的代码:
#include<iostream>
#include<string.h>
#include<conio.h>
#include<stdio.h>
using namespace std;
struct student
{
char name[30];
char firstname [50];
int grade;
}s[50];
int i,n,o,done=0;
void add_student()
{
cout<<"Number of students:"<<" ";
cin>>n;
cout<<endl;
for(i=1; i<=n; i++)
{
fflush(stdin);
cout<<"Student"<<" "<<i<<":"<<endl;
cout<<"name of student:"<<" ";
gets(s[i].name);
cout<<"first name of student:"<<" ";
gets(s[i].firstname);
cout<<"grade of student:"<<" ";
cin>>s[i].grade;
cout<<endl;
}
}
void sort_name()
{
char temp[30];
while(!done)
{
done=1;
for(i=1; i<n; i++)
{
if(strcmp(s[i].name,s[i+1].name)>0)
{
strcpy(temp,s[i].name);
strcpy(s[i].name,s[i+1].name);
strcpy(s[i+1].name,temp);
}
}
}
for(i=1; i<=n; i++)
{
cout<<"Student"<<" "<<i<<":"<<endl;
cout<<"Name"<<":"<<s[i].name<<endl;
cout<<"Firstname"<<":"<<s[i].firstname<<endl;
cout<<endl;
}
}
void sort_grade()
{
int temp;
while(!done)
{
done=1;
for(i=1;i<n;i++)
{
if(s[i].grade>s[i+1].grade)
{
temp=s[i].grade;
s[i].grade=s[i+1].grade;
s[i+1].grade=temp;
done=0;
}
}
}
for(i=1; i<=n; i++)
{
cout<<"Student"<<" "<<i<<":"<<endl;
cout<<"Name"<<":"<<s[i].name<<endl;
cout<<"Firstname"<<":"<<s[i].firstname<<endl;
cout<<"Grade"<<":"<<s[i].grade<<endl;
cout<<endl;
}
}
void list_students()
{
int i;
for(i=1; i<=n; i++)
{
cout<<"Student"<<" "<<i<<":"<<endl;
cout<<"Name"<<":"<<s[i].name<<endl;
cout<<"Firstname"<<":"<<s[i].firstname<<endl;
cout<<"Grade"<<":"<<s[i].grade<<endl;
cout<<endl;
}
}
int main()
{
do
{
cout<<"Menu:"<<endl;
cout<<"1.Add students"<<endl;
cout<<"2.Sort by name"<<endl;
cout<<"3.Sort by grade"<<endl;
cout<<"4.List students"<<endl;
cout<<"5.Exit"<<endl<<endl;
cout<<"Pick option : ";
cin>>o;
cout<<endl;
switch (o)
{
case 1:add_student();
break;
case 2:sort_name();
break;
case 3:sort_grade();
break;
case 4:list_students();
break;
}
}while (o!=5);
}
问题是每当我按成绩排序时,例如学生 A 的成绩为 9,学生 B 的成绩为 7,排序后它会告诉我学生 A 的成绩为 7,学生 B 的成绩为 9。我知道我我告诉排序功能只排序等级而不是名称,但我不知道如何解决它。这可能非常简单,我认为它涉及某种指针,但我真的不知道。哦,如果你能如果名字相同,请提供一些关于如何在名字之后进行排序的信息。如果有人可以帮助我,我将非常感激。提前谢谢!!(如果有人可以给我任何关于这个问题的指示看起来像 ci 真的很感激)
【问题讨论】:
-
是时候熟悉调试器了。
-
这不是'c',请不要这样做
fflush(stdin);。 -
你知道在c++中数组的第一个元素是由
0索引的吗? -
我只从 1 开始,因为学生的列表会从 0 开始,比如学生 0、学生 1 等等,我会那样做。如果不好,我不会再这样做了fflush 的情况。我放了 c 标签,因为我的许多书,甚至我的一些老师都未能解释 c 和 c++ 之间的区别,他们只是让它们看起来有点像我知道不是这种情况。无论如何,谢谢大家的帮助。这实际上是我第一次来这里,你们让我想要改进。继续努力!
标签: c++