前提・実現したいこと
C言語でbsearchを使い、ある配列の中に特定の値が格納されているのかどうかを判別したいのですが、以下のようなエラーメッセージが出ます。おそらくはポインタの指定が正しくないからだと推測できますが、どのように直せばよいのかが分かりません。どなたか教えてもらえないでしょうか?よろしくお願いします。
発生している問題・エラーメッセージ
mineud.c:43: 警告: assignment makes integer from pointer without a cast
該当のソースコード
C
1#include <stdio.h> 2#include <stdlib.h> 3#include <math.h> 4 5double x[1400],y[1400]; 6int eud2d(int i, int j); 7 8int comp(const void *c1, const void *c2); 9 10int main(){ 11 int a,a1,b,b1,k,l,m,n,p,dis,result; 12 int z[1400]; 13 char buf[256]; 14 15 for(l=0;l<1400;l++){ 16 fgets(buf,256,stdin); 17 sscanf(buf,"%d %lf %lf",&a,&x[l],&y[l]); 18 } 19 20 n = 0; 21 p = 0; 22 z[p] = n; 23 p++; 24 result = 0; 25 26 for(m=0;m<1400;m++){ 27 dis = 9999; 28 for(k=0;k<1400;k++){ 29 if(n==k) continue; 30 if(result==0){ 31 if(dis>eud2d(n,k)){ 32 a1 = n; 33 b1 = k; 34 dis = eud2d(n,k); 35 } 36 } 37 else continue; 38 } 39 printf("a=%d b=%d dis=%d\n",a1,b1,dis); 40 n = b1; 41 z[p] = n; 42 qsort(z,p,sizeof(int),comp); 43 result = (int *)bsearch(&k,z,p,sizeof(int),comp); /* ここが問題の箇所です。*/ 44 p++; 45 } 46 47 return 0; 48} 49 50int eud2d(int i, int j){ 51 52 double xd,yd; 53 54 xd = x[i]-x[j]; 55 yd = y[i]-y[j]; 56 57 return (int) (sqrt(xd*xd+yd*yd) +0.5); 58} 59 60int comp(const void *c1,const void *c2){ 61 62 int tmp1 = *(int*)c1; 63 int tmp2 = *(int*)c2; 64 65 if(tmp1 < tmp2) return -1; 66 if(tmp1 == tmp2) return 0; 67 if(tmp1 > tmp2) return 1; 68} 69
補足情報(FW/ツールのバージョンなど)
Linuxを使っています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。