ファイルから数値のデータを読み取る関数
数値のデータを選択ソートして昇順にする関数
二分探索する関数
これらを使ったプログラム
前提
ファイルから数値のデータを読み取り、二分探索するプログラムを「ファイルからデータを読み込む」「データの整列」「二分探索」の3つの関数を使用してプログラムを作成したいのですが、どの数値を探索しても-1を返されます。コンパイルはできますが、コアダンプが出ていてどこを直せばいいのかが分かりません。
該当のソースコード
c言語で、関数に分けてみたプログラムです。
#include <stdio.h> #include <stdlib.h> #define MAXDATA 10000 int fileopen(int a[MAXDATA]){ char filename[20]; FILE *fin; int n; 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; } void sort(int a[MAXDATA], int n){ int i, j, k; int tmp; int max; 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 binarysearch(int n, int x, int a[MAXDATA]){ int min = 0; int mid; int i = 0; int position; int max = n-1; 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 x; int position; int max; n = fileopen(&a[MAXDATA]); max = n; sort(&a[MAXDATA], n); while (scanf("%d", &x)==1) { position=-1; binarysearch(n, x, &a[MAXDATA]); printf(" x=%d ---> %d\n", x, position); } printf("またお会いしましょう\n"); return 0; }
試したこと
binarysearchの部分をいじってみましたが、どこを変えればきちんと位置の値が出るのか分かりませんでした。ソートは昇順にはなるのですが、一部数値がおかしくなります。
補足情報(FW/ツールのバージョンなど)

回答1件
あなたの回答
tips
プレビュー