すみません提示するコード間違えてました。正しくは、下記のコードの変更前のものです。
紙に書くと自分が何を間違えているか確認することができました。ありがとうございます。
きちんと動作するのでこれにて解決とさせていただきます。
最終コードを載せておきます。
コード:
#include <stdio.h>
#include <stdlib.h>
#define DATA 10000
int fileinput(const char *filename, int a[])
{
int n, x;
FILE *fin = fopen(filename, "r");
if (fin == NULL) return -1;
for (n = 0; n <= DATA && fscanf(fin, "%d", &x) == 1; n++)
if (n < DATA) a[n] = x;
fclose(fin);
return n;
}//ファイルからデータを入力する関数
void selectionsort(int a[DATA],int n )
{
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;
}
}//データを整列する関数
int binsearch(int a[DATA],int x,int min,int max)
{
if (min <= max){
int mid = ( min + max )/ 2;
if (a[mid] == x)
return mid;
if (a[mid] < x)
return binsearch(a,x,mid+1,max); //変更前(a,x,min,mid-1)→変更後(a,x,mid+1,max)
else if (a[mid] > x)
return binsearch(a,x,min,mid-1);//変更前(a,x,mid+1,max)→変更後(a,x,min,mid-1)
}
return -1;
}//二分探索する関数
int main(void)
{
char filename[20];
int n,x,y;
int a[DATA];
printf("ファイル名=");
scanf("%s",filename);
n=fileinput(filename,a);
if(n==-1){
printf("ファイルをオープンできません。\n");
return 1;
}
if (n >DATA ){
puts("データが多すぎます\n");
return 2;
}
selectionsort(a,n);
puts("探したい値を入力してください");
while (scanf("%d",&x) == 1){
y = binsearch(a,x,0,n-1);
if (y >= 0)
printf("x = %d --> %d\n",x,y);
else
puts("見つかりませんでした");
}
printf("またお会いしましょう\n");
return (0);
}