入力ファイルにあるN 個の整数のデータを配列に入力し、その配列内のデータを
小さい順に並べ替え、結果を出力ファイルに書き込む。(N ≦ 10で小さいものから順に並べる)
このプログラムをかいてみたのですが、エラーはおこりませんがうまくいきません。最後に変な数字がでてきたり、整数の個数が10個のとき10個以上のときなどがうまくいきません。。。
詳しく説明できるかた、どうか訂正お願いします。
#include <stdio.h>
#define MAX 10
int sort(int n[],int m){
int N=0,i=0,j=0;
for(i=0; i<m; i++){
for(j=i+1; j<m; j++){
if(n[i] > n[j]){
N = n[i];
n[i] = n[j];
n[j] = N;
}
}
}
return(n[m]);
}
int main(int argc, char *argv[])
{
FILE *fpi, *fpo;
int m=0, i=0;
int n[MAX];
if(argc != 3){
fprintf(stderr, "Illegal number of argument.\n");
return(-1);
}
if((fpi=fopen(argv[1],"r"))==NULL) {
fprintf(stderr, "Can't open input file <%s>.\n", argv[1]);
return(-1);
}
else {
while(! feof(fpi)){
fscanf(fpi,"%d",&n[m]);
m++;
}
if(m>=MAX){ //10こ以上の入力の判断
printf("NUMBER IS OVER");
return(-1);
}
fclose(fpi);
}
if((fpo=fopen(argv[2],"w"))==NULL) {
fprintf(stderr, "Can't open output file <%s>.\n", argv[2]);
return(-1);
}
else{
sort(n,m-1);//並べ替える関数にnの配列とm-1をわたす
//EOFまで数えてるから数字は1つ前まで
for(i=0;i<m;i++){
fprintf(fpo,"%d ",n[i]);
}
fclose(fpo);
}
return 0;
}