c
1#include<stdio.h> 2#include<stdlib.h> //exit 関数を利用するための御呪い 3#define COUNT 10000 //学生数 4typedef struct student{ 5int id; //学生番号 6int kok; //国語の点数 7int sug; //数学の点数 8int eng; //英語の点数 9}STUDENT; //構造体の再定義 10//関数のプロトタイプ宣言 11void getData(STUDENT*); 12int binarySearch(STUDENT*, int); 13int main(void){ 14STUDENT list[COUNT]; //学生情報を格納する構造体配列 15int target; //照会したい学生番号 16int sid; //照会結果(配列番号) 17getData(list); //データの読込み.構造体配列の先頭位置のアドレスを渡します. 18printf("データの照会を行います.\n"); 19printf("学生番号を入力してください(10000-19999):"); 20scanf("%d", &target); 21if(target > 19999 || target < 10000){ 22printf("無効な学生番号が入力されました.\n"); 23printf("プログラムを終了します.\n"); 24exit(-1); 25} 26sid = binarySearch(list, target); 27//バイナリサーチ.バイナリサーチが完了すると sid には探索した構造体配列のアドレスが入ります. 28if(sid != -1){ 29printf("学生番号\t 国語\t 数学\t 英語\n"); 30printf("%6d\t %3d\t %3d\t %3d\n", list[sid].id, list[sid].kok, 31list[sid].sug, list[sid].eng); 32}else{ 33printf("入力した学籍番号は検出できません.\n"); 34} 35return 0; 36} 37//--------------------------------------------------binarySearch 関数 38int binarySearch(STUDENT *array,int target){ 39int left = 0; //探索範囲の先頭位置(初期値 = 0 (配列の添字)) 40int right = COUNT - 1; //探索範囲の末尾位置(初期値 = 9999(配列の添字)) 41int middle; 42while(left <= right){ //探索範囲が1つになるまで探索範囲の限定を行う. 43 middle = (left+right)/2; 44 45 if((array+middle) == target) 46 return middle; 47 48 else if((array+middle) < target) 49 left = middle + 1; 50 51 else 52 right = middle - 1; 53} 54if((array + middle)->id != target){return -1;} 55//最終的に見つからない場合は-1 を返す. 56return middle; 57} 58//--------------------------------------------------getData 関数 59void getData(STUDENT *array){ 60FILE *fp1; //読込み用ファイルポインタ 61int i = 0; //ループ変数 62if((fp1 = fopen("score.txt", "r")) != NULL){ 63printf("「score.txt」のファイルオープンに成功しました.\n"); 64}else{ 65printf("「score.txt」のファイルオープンに失敗しました.\n"); 66printf("プログラムを終了します.\n"); 67exit(-1); 68} 69while(fscanf(fp1, "%d%d%d%d", &(array +i)->id, &(array +i)->kok, 70&(array +i)->sug, &(array +i)->eng) != EOF){i++;} 71fclose(fp1); 72}
score.txtというファイルを読み込んでそのなかからbinarySearchを使用してデータを探すプログラムを作っているのですが実行するとbinarySearch内で下記のようなエラーが起こってしまいます、自分で調べてみたところ「int型」のものと「int型ではないもの」を比べているから出ているのかなと思いました。
しかし、どうすればうまく動くように変えられるのかがわからず困っています。もしかしたらエラーの内容も自分の調べたものとは外れてしまっているかもしれないのでわかる方いらっしゃったら教えていただきたいです。
c
1Main.c:45:20: warning: comparison between pointer and integer ('STUDENT *' (aka 'struct student *') and 'int') [-Wpointer-integer-compare] 2 if((array+middle) == target) 3 ~~~~~~~~~~~~~~ ^ ~~~~~~ 4Main.c:48:25: warning: ordered comparison between pointer and integer ('STUDENT *' (aka 'struct student *') and 'int') 5 else if((array+middle) < target) 6 ~~~~~~~~~~~~~~ ^ ~~~~~~
回答1件
あなたの回答
tips
プレビュー