本質的な問題は、sort
関数に、dat
という「int
型の配列」ではなく、dat[10]
という「int
」を渡そうとしているところにあります。つまり、入力データである「10 個の数字の列」ではなく、「10 個入力されたうちの最後の数字」を渡すだけになってしまっています。
「int
型のポインタ」を渡すようにするのがよいと思います。その場合、次のようになります。
c
1#include <stdio.h>
2
3int sort(int *dat);
4
5int main(void)
6{
7 int i,j,temp;
8 int dat[10];
9 printf("10個の実数を入力\n");
10 for(i=0;i<10;i++)
11 scanf("%d",&dat[i]);
12 sort(dat);
13 printf("\n並び替えた後\n");
14 for(i=0;i<10;i++)
15 printf("%d\n",dat[i]);
16}
17
18int sort(int *dat)
19{
20 int i,j,temp;
21 temp=0;
22 for (i=0;i<10;i++){
23 for (j=i+1;j<10;j++) {
24 if (dat[i]>dat[j]){
25 temp = dat[i];
26 dat[i] = dat[j];
27 dat[j]= temp;
28 }
29 }
30 }
31}
ちなみに、ソートするデータの個数は、呼び出し側から教えてあげることで、sort
関数を、さまざまな個数のデータをソートできる関数にすることができます。
c
1#include <stdio.h>
2
3int sort(int *dat, int len);
4
5int main(void)
6{
7 int i,j,temp;
8 int dat[10];
9 printf("10個の実数を入力\n");
10 for(i=0;i<10;i++)
11 scanf("%d",&dat[i]);
12 sort(dat, 10);
13 printf("\n並び替えた後\n");
14 for(i=0;i<10;i++)
15 printf("%d\n",dat[i]);
16}
17
18int sort(int *dat, int len)
19{
20 int i,j,temp;
21 temp=0;
22 for (i=0;i<len;i++){
23 for (j=i+1;j<len;j++) {
24 if (dat[i]>dat[j]){
25 temp = dat[i];
26 dat[i] = dat[j];
27 dat[j]= temp;
28 }
29 }
30 }
31}