アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語探索プログラムについて質問です。

#include <stdio.h>
#define MAXSIZE 100

void swapData(int *x, int *y){
int tmp;

tmp = *x;
*x = *y;
*y = tmp;
}

void simpleSort(int data[], int first, int last)
{
int i, j;
for(i = first; i < last; i++){
for(j = i+1; j <= last; j++){
if(data[i] > data[j]) {
swapData(&data[i], &data[j]);

}
}
}
}

int ArrayBinarySearch(int data[], int n, int x)
{
int left = 0, right = n - 1, center;

while(left <= right){
center = (left + right)/2;
if(data[center]=x){
return center;
}else if(x > data[center]){
left = center + 1;
}else if(x < data[center]){
right = center - 1;
}
}

return -1;
}

int main(int argc, char *argv[])
{

int data[MAXSIZE];
int i, x;
FILE *fp;

scanf("%d", &x);

fp = fopen(argv[1], "r");

for(i = 0; i < MAXSIZE; i++)
{
if (fscanf(fp,"%d", &data[i]) == EOF)
break;
}

simpleSort(data, 0, i-1);
printf("%d", ArrayBinarySearch(data, i, x ));

return 0;
}

数値が書かれたファイルを読み込んでソートした後に二分探索を行うプログラムをつくったのですが、うまく動きません。
どこがおかしいか教えてください。
お願いいたします。
ちなみに関数ArrayBinarySearchは目的の値が見つかれば配列中でのインデックスを、見つからない場合は-1を返す関数にしているつもりです。

A 回答 (1件)

int ArrayBinarySearch(int data[], int n, int x)


{
int left = 0, right = n - 1, center;

while(left <= right){
center = (left + right)/2;
if(data[center]=x){ /* ココ */
return center;
}else if(x > data[center]){
left = center + 1;
}else if(x < data[center]){
right = center - 1;
}
}

これだとXの値を代入して、そのXの値でif文を判定してしまいます。
正しくは
if(data[center]==x){
です。まぁ、よくある間違いですね。
    • good
    • 0
この回答へのお礼

あ・・・・
初歩的な間違いですね汗
ありがとうございます!!

お礼日時:2011/07/12 10:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!