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

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

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

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

Q&A

解決済

2回答

2122閲覧

線形探索の処理でエラーが出ました。

OHASI

総合スコア96

C

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

0グッド

1クリップ

投稿2020/10/19 15:33

エラーが出て行き詰まっています。下の方にエラーが出たコードを書いてます。
<問>
番号とテストの得点が格納されたデータファイルのファイル名(20 文字以内)をキーボードから入力する.ファイルがオープンできなければエラーメッセージ「FILE OPEN ERROR」を表示して終了する.オープンできた場合は,ファイルの内容を以下の構造体配列に入力しながら表示し,入力終了後,レコード件数を表示してファイルをクローズする.
struct SDATA {
int bango, tokuten;
};
struct SDATA seiseki[100];
その後,番号をキーボードから入力し,その得点を表示する.番号が見つからなければ「見つかりませんでした」を表示する.

/*自分で書いたコード*/ #include<stdio.h> #include<stdlib.h> int main(void) { char filename[21]; FILE *fp; struct seisekiA{ int bango, tokuten; }; struct seisekiA seiseki[100]; int n=0;/*配列へ格納するための添字,及び入力レコード件数*/ int x;/*探索に使用する変数を追加(変数名は自分で決める)*/ printf("ファイル名を入力してください\n"); scanf("%s",filename); if((fp=fopen(filename,"r"))==NULL) { printf("FILE OPEN ERROR\n"); exit(1); } printf("番号 得点\n"); while(fscanf(fp,"%d%d",&seiseki[n].bango,&seiseki[n].tokuten)!=EOF) { printf("%4d %4d\n",seiseki[n].bango,seiseki[n].tokuten); n++; } printf("レコード件数=%d\n",n); fclose(fp); /*間違ってると思われるところ(ここから)*/ printf("番号を入力してくださ\n");/*線形探索の処理*/ scanf("%d",&x); while(n<100 && x != seiseki[n]) n++; if(n<100) printf("%d\n",seiseki[n]); else printf("見つかりませんでした"); /*間違ってると思われるところ(ここまで)*/ return 0; }
/*エラーが出たところ(上のコードから引用)*/ while(n<100 && x != seiseki[n]) n++;

以上よろしくお願いします。

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

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

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

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

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

episteme

2020/10/20 04:38

どんなエラーが出たんですか?
guest

回答2

0

ベストアンサー

printf("レコード件数=%d\n",n);
n は 0 ではないでしょう。

while(n<100 && x != seiseki[n]) n++;
入力データは seiseki[0]~seiseki[n-1] に入っています。
seiseki[n]~seiseki[99] にデータは入っていません
x は int です。seiseki[n] は struct seisekiA です。
!= で比較なんかできません。

C

1 int i = 0; 2 while (i < n && seiseki[i].bango != x) i++;

にしてください。

printf("%d\n",seiseki[n]);
%d は int の値を表示します。seiseki[n] は int ではありません。

投稿2020/10/20 04:03

編集2020/10/20 04:05
kazuma-s

総合スコア8224

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

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

OHASI

2020/10/20 07:31

解決しました。 わかりやすい解説ありがとうございます。
guest

0

while(n<100 && x != seiseki[n]) n++;

ここに入る直前、nはいくつになってます?
その値から検索を始めていいんですか?

投稿2020/10/19 15:58

編集2020/10/19 15:59
episteme

総合スコア16614

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

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

OHASI

2020/10/20 02:45

nは0になっています。nは0から始めると思うのですが、違うのでしょうか?
episteme

2020/10/20 03:03

> nは0になっています。 コードのどこで0にしてるんですか?
OHASI

2020/10/20 07:28

解決しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問