質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Q&A

解決済

1回答

1519閲覧

c言語でエラーが起こっている原因と対処法を教えていただきたいです

jump110

総合スコア10

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

0グッド

0クリップ

投稿2021/05/31 07:16

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 ~~~~~~~~~~~~~~ ^ ~~~~~~

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/05/31 07:24

「array+middle」はポインタです、targetとの比較は何を比較することを意図していますか? 「ID」との比較を意図しているのであれば「(array + middle)->id != target」と同様に「->id」による比較を行えばいいかと。
fana

2021/05/31 07:27

(それはもう完全に「回答」になっているように見えるので,「回答」として書けば良いのではないでしょうか?)
kaina

2021/05/31 07:29

ソースコードにインデントが無いので、非常に見づらいです。 このままでは読む気が起きないので修正お願いします。
guest

回答1

0

ベストアンサー

if((array+middle) == target)

array はポインタ型で、targetはint型です
違う型通しでは比較はできません。
ここでは何を比較してるんでしょうか。そこんとこはっきりさせましょう

投稿2021/05/31 07:34

y_waiwai

総合スコア87800

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問