ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:rurur 検索がうまくいきません(pascal)
困り度:
  • すぐに回答を!
名前と電話番号を外部環境'teldata'に出力し、検索したい人の名前を入力し対応する電話番号を答えるプログラムを作りました(登録されてなければ「該当者なし」と出力、'end'が入力されるまで続く)。
コンパイルは通ったのですが検索結果はおかしなものになってしまいました。
どこが間違っているのか、ご教授ください。
ソース)
program kadai(input,output,meibo);


type KojinData = record
name : packed array[1..20] of char;
tel : packed array[1..15] of char
end;
var meibo : file of KojinData;
x : KojinData;
begin
rewrite( meibo,'teldata' );
write('名前:');
readln(x.name);
repeat
write('電話番号:');
readln( x.tel );
write( meibo,x);
write('名前:');
readln( x.name )
until (x.name='end');
reset( meibo,'teldata' );
write('名前:');
readln(x.name);
repeat
while not eof( meibo ) do begin
read( meibo,x )
end;
if x.name = x.name then begin
writeln('電話番号:',x.tel) end
else begin
writeln('該当者なし') end
until (x.name='end')
end.

結果)
名前:a
電話番号:1
名前:b
電話番号:2
名前:c
電話番号:3
名前:end
名前:a
電話番号:3
電話番号:3
電話番号:3
電話番号:3 {強制終了するまで続く}
質問投稿日時:08/04/30 12:04
質問番号:3987108
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

 

回答者:Tacosan ちょっと考えてほしいのですが, 「全てのデータを読み出してから比較する」必要はありますか?
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/04/30 15:28
回答番号:No.3
この回答へのお礼「1つ読み出してそのつど確認する」のを終りまで繰り返す、ようにプログラムして大体はできました。
まだ少し改良したい点はありますがそこは自分でなんとかしようと思います。
アドバイス、ありがとうございました。

回答

良回答10pt

回答者:redfox63 ここで探す名前を入力
> write('名前:');
> readln(x.name); ... (1)

ファイルからデータを取り出している
> while not eof( meibo ) do begin
> read( meibo,x ) ... (2)
> end;

(1)と(2)が同じ変数へ代入している ・・・ これで判定出来ますか
=の両辺にある『x.name 』は違う物が存在するのか ・・・
> if x.name = x.name then begin
> writeln('電話番号:',x.tel) end
> else begin
> writeln('該当者なし') end
> until (x.name='end')
種類:アドバイス
どんな人:専門家
自信:参考意見
回答日時:08/04/30 13:24
回答番号:No.2
この回答へのお礼ご指摘を受けて直し、かなり完成に近いところまでこぎつけました。
まだ残ってるところは自分でなんとか改良したいと思います、アドバイスありがとうございました。

回答

良回答20pt

回答者:Tacosan 後ろの repeat の中が変です.
まず, せっかく入力してもらった「名前」を, そのあとの read で潰してます.
さらに, teldata に書き出したデータも最後の 1個を除いて無視しちゃっています.
とどめに if の条件をよく見てください.
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/04/30 13:19
回答番号:No.1
この回答への補足readでデータを全て読み出して記憶し、入力した名前が含まれてるか判定する、と考えたのですがそうはできないのですね・・・。
この回答へのお礼この回答にお礼をつける(質問者のみ)
 
最新から表示回答順に表示良回答のみ表示