#9
by asd » 8年前
しき さんが書きました:文字を一つ足してそれをそのままというわけにはいかないんですね・・。
これだと Segmentation fault (コアダンプ) というのがでてうまくいきません。
解決策を教えてください。
lという変数は宣言されているだけで値が設定されていないので、0以外の変な値が入っているかもしれません。
その結果a[l]という指定はlの値によっては配列の範囲外になってしまうかもしれませんね。
それでSegmentation faultが起きているのではと思います。
最終形として提示していただいたソースで足りなかったのは、
点数が格納されているdはソートしているけど、それとセットになっているはずの出席番号が入っているaはノータッチだったことにあります。
であれば、dをソートして入れ替えているところで、同じようにaも入れ替えてしまえばどうでしょうか?
しき さんが書きました:
コード:
#include <stdio.h>
#define MAXDATA 100
#define ATTEND 30
int main()
{
int d[MAXDATA];
int X;
int a[ATTEND];
int i, j, k;
int tmp;
printf("今回集計する人数を入力="); scanf("%d",&X);
for (i = 0; i < X; i++){
printf("試験の成績を入力してください。\n");
printf("%d 人目:",i+1);
scanf("%d", &d[i]);
printf("次に出席番号を入力してください。\n");
scanf("%d" ,&a[i]);
}
printf("今回の試験順位(昇順)\n");
for(i=0;i < X-1; i++){
j=i;
for(k=i+1; k < X; k++){
if(d[j]<d[k]){ j = k; }
}
tmp = d[j];
d[j] = d[i];
d[i] = tmp;
//出席番号が入っているaも点数のdと同じように入れ替える必要がある
}
for (i = 0; i < X; i++) {
printf("出席番号:%d ", a[i]); printf("点数:%d\n", d[i]);
}
}
上記のコメント箇所で出席番号も入れ替えて点数の配列dとセットでソートされるようにしてみてください。
[quote="しき" id=3,19425,146861]文字を一つ足してそれをそのままというわけにはいかないんですね・・。
これだと Segmentation fault (コアダンプ) というのがでてうまくいきません。
解決策を教えてください。
[/quote]
lという変数は宣言されているだけで値が設定されていないので、0以外の変な値が入っているかもしれません。
その結果a[l]という指定はlの値によっては配列の範囲外になってしまうかもしれませんね。
それでSegmentation faultが起きているのではと思います。
最終形として提示していただいたソースで足りなかったのは、
点数が格納されているdはソートしているけど、それとセットになっているはずの出席番号が入っているaはノータッチだったことにあります。
であれば、dをソートして入れ替えているところで、同じようにaも入れ替えてしまえばどうでしょうか?
[quote="しき" id=3,19425,146861]
[code]
#include <stdio.h>
#define MAXDATA 100
#define ATTEND 30
int main()
{
int d[MAXDATA];
int X;
int a[ATTEND];
int i, j, k;
int tmp;
printf("今回集計する人数を入力="); scanf("%d",&X);
for (i = 0; i < X; i++){
printf("試験の成績を入力してください。\n");
printf("%d 人目:",i+1);
scanf("%d", &d[i]);
printf("次に出席番号を入力してください。\n");
scanf("%d" ,&a[i]);
}
printf("今回の試験順位(昇順)\n");
for(i=0;i < X-1; i++){
j=i;
for(k=i+1; k < X; k++){
if(d[j]<d[k]){ j = k; }
}
tmp = d[j];
d[j] = d[i];
d[i] = tmp;
//出席番号が入っているaも点数のdと同じように入れ替える必要がある
}
for (i = 0; i < X; i++) {
printf("出席番号:%d ", a[i]); printf("点数:%d\n", d[i]);
}
}
[/code][/quote]
上記のコメント箇所で出席番号も入れ替えて点数の配列dとセットでソートされるようにしてみてください。