関数を複数使用した二分探索のプログラムについて教えていただきたいです。

ファイルから数値のデータを読み取る関数
数値のデータを選択ソートして昇順にする関数
二分探索する関数
これらを使ったプログラム

前提

ファイルから数値のデータを読み取り、二分探索するプログラムを「ファイルからデータを読み込む」「データの整列」「二分探索」の3つの関数を使用してプログラムを作成したいのですが、うまくできず困っています。ファイルから読み取って二分探索するプログラムはできているのですが、関数に分けて作成しようとするとうまく動かなくなったため、質問しました。

該当のソースコード

c言語で、関数に分けてみたプログラムです。
#include <stdio.h>
#include <stdlib.h>
#define MAXDATA 10000

int file(int a[MAXDATA], int n){

char filename[20];
FILE *fin;

printf("file name = ");
scanf("%s", filename);
if ((fin=fopen(filename, "r"))==NULL) {
printf("ファイルをオープンできません\n");
return 1;
}
n=0;

while (fscanf(fin, "%d", &a[n])==1) n++;
fclose(fin);

return n;
}

int sort(int n, int a[MAXDATA], int max){

int i, j, k;
int tmp;

for (i = 0; i < n-1; i++) {
j = i;
for (k = i+1; k < n; k++) {
if (a[j] > a[k]) { j = k; }
}
tmp = a[j];
a[j] = a[i];
a[i] = tmp;
}
for (i = 0; i < n; i++) {
printf("%d\n", a[i]);
}
max = i;
}

int binary(int position, int n, int max, int x, int a[MAXDATA]){

int min = 0;
int mid = (max+min)/2;
int i = 0;

while (position==-1 && i<n) {

mid = (max+min)/2; if (a[mid]==x) position=mid+1;

else if (a[mid] < x){
min = mid+1;
i++;
}
else if (a[mid] > x){
max = mid-1;
i++;
}
}
return position;
}

int main(void){

int a[MAXDATA];
int n;
int max;
int position;
int x;

file(&a[MAXDATA], n);

sort(n, &a[MAXDATA], max);

while (scanf("%d", &x)==1) {
position=-1;

binary(position, n, max, x, &a[MAXDATA]); printf(" x=%d ---> %d\n", x, position);

}
printf("またお会いしましょう\n");
return 0;
}

試したこと

関数に分けて引数を使用して作成したのですが、色々いじったらコンパイルでエラーが多く出たため、一度デフォルトにもどしました。

補足情報(FW/ツールのバージョンなど)

コメントを投稿

0 コメント