生徒の番号、名前と点数を入力した後、それを昇順に並べ直したいのですが
実行はできるのですが、うまく並び替えられません
#include<stdio.h>
struct data{
int bango;
char name[10];
int ten;
};
struct data seiseki[6];
main(){
int i,j;
for(i=0;i<5;i++){
printf("%d人目 番号 名前 点数\n",i+1);
scanf("%d %s %d",&seiseki.bango,&seiseki.name,&seiseki.ten);
}
for(j=0;j<4;j++){
for(i=1;i<5;i++){
if(seiseki[j].ten>seiseki.ten){
seiseki[6]=seiseki;
seiseki=seiseki[j];
seiseki[j]=seiseki[6];
}
}
}
printf("番号 名前 点数\n");
for(i=0;i<5;i++){
printf("%d %4s %4d\n",seiseki.bango,seiseki.name,seiseki.ten);
}
}
自分ではif文の辺りが間違っているような気がします
C言語の課題について
Re:C言語の課題について
どううまくいかないのか、具体的に書いたほうがいいです。
>scanf("%d %s %d",&seiseki.bango,&seiseki.name,&seiseki.ten);
&seiseki.name の & はいりません。
また、seiseki[6] は、配列の範囲外です。
Re:C言語の課題について
1人目 番号 名前 点数
2
2
2
2人目 番号 名前 点数
3
3
3
3人目 番号 名前 点数
4
4
4
4人目 番号 名前 点数
5
5
5
5人目 番号 名前 点数
1
1
1
上のように5人分のデータを入力するところまではいいのですが、下の実行結果のように順序がバラバラになってしまうんです
番号 名前 点数
1 1 1
5 5 5
4 4 4
2 2 2
3 3 3
2
2
2
2人目 番号 名前 点数
3
3
3
3人目 番号 名前 点数
4
4
4
4人目 番号 名前 点数
5
5
5
5人目 番号 名前 点数
1
1
1
上のように5人分のデータを入力するところまではいいのですが、下の実行結果のように順序がバラバラになってしまうんです
番号 名前 点数
1 1 1
5 5 5
4 4 4
2 2 2
3 3 3
Re:C言語の課題について
seiseki[6]は配列範囲外です。
配列は、"宣言した数値 - 1"までの配列しか使うことが出来ません。
なので、上記のように指定すると、seiseki[0]からseiseki[5]までの配列を使用することが出来ます。
よって、このプログラムの場合、seiseki[6]を"a"などの仮変数にして、順序を入れ替えたほうが分かりやすいです。
<例>
int a; /* 最初に宣言 */
a = seiseki;
seiseki = seiseki[j];
seiseki[j] = a;
あと、
for(j=0;j<4;j++){
for(i=1;i<5;i++){
if(seiseki[j].ten>seiseki.ten){
<中略>
}
}
}
上記の部分の、for文を次のように直してください
これで出来ると思います。
for( j = 0 ; j < 5 ; j++ ){
for( i = j + 1 ; i < 6 ; i++ ){
if( seiseki[j].ten > seiseki.ten ){
<中略>
}
}
}
これでどうでしょう?
意味が分からなければ、またお答えします。
配列は、"宣言した数値 - 1"までの配列しか使うことが出来ません。
なので、上記のように指定すると、seiseki[0]からseiseki[5]までの配列を使用することが出来ます。
よって、このプログラムの場合、seiseki[6]を"a"などの仮変数にして、順序を入れ替えたほうが分かりやすいです。
<例>
int a; /* 最初に宣言 */
a = seiseki;
seiseki = seiseki[j];
seiseki[j] = a;
あと、
for(j=0;j<4;j++){
for(i=1;i<5;i++){
if(seiseki[j].ten>seiseki.ten){
<中略>
}
}
}
上記の部分の、for文を次のように直してください
これで出来ると思います。
for( j = 0 ; j < 5 ; j++ ){
for( i = j + 1 ; i < 6 ; i++ ){
if( seiseki[j].ten > seiseki.ten ){
<中略>
}
}
}
これでどうでしょう?
意味が分からなければ、またお答えします。