dポイントプレゼントキャンペーン実施中!

「address2.txt」に登録してあるアドレスを検索するプログラムなのですが、アドレスが検索されない時に再度検索できるように付け足したのですが、「continueとbreakの位置が誤っている」と表示されます。どう訂正すればうまくいくのでしょうか?
#define FNAME "address2.txt"
#define RECORDLEN 16
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *format = "%-15s\n";
int main()
{
FILE *fp;
char search[16], address[16],ans[8];
int no = 0, find = 0;
fp = fopen(FNAME, "r+");
if(fp==NULL){
perror("ファイルエラー\n");
return -1;
}
printf("アドレスの入力-- ");
gets(search);
while (1) {
fseek(fp, RECORDLEN * no++, SEEK_SET);
if (fscanf(fp, "%s", address) == EOF)
break;
if (strstr(address, search) != NULL) {
find++;
printf("アドレス: %s\n", address);
}
}
if(find>=1){
printf("アドレスが一致しました。" );
}
else {
printf("アドレスが一致しません。\n");
printf("再度検索し直しますか?(Y/N)\n");
gets(ans);
if(ans[0]=='y'||ans[0]=='Y')
continue;
else
break;
}
fclose(fp);
return 0;
}

A 回答 (5件)

ざっと見たところ、括弧の対応が取れていないね。


多分、
if(find>=1){
から
fcloseの前の行までが、while文の括弧の中に無いからだと思うよ。
間違ってたらごめん。
    • good
    • 0
この回答へのお礼

その通り原因は括弧でした。
どうもありがとうございました。

お礼日時:2005/11/04 17:11

ANo2です。


すいません。先ほどは括弧対応のみ見て発言してしまいました。

仕様があいまいなのですが、再検索時に再度入力を促すのであれば、
下記コードの前に、もう一階層ループが必要となるのではないでしょうか。
(検索に対する、画面入出力インターフェイスのメインループ)

  printf("アドレスの入力-- ");
  gets(search);

今あるのは、ファイルシーク用のループしかないですよね!

※先ほどからこの投稿を何回もしてるんですが、うまくいきません。
 何度も同じような回答が反映されてしまったら、申し訳ないです。
 (これは3回目です)
 
    • good
    • 0
この回答へのお礼

確かにcontinueとbreakの問題は解決できたのですが、再検索がうまくできません。あと別の問題が発生したのでそれと一緒にもう一度質問させていただきます。
何度も回答もらい迷惑かけてすいませんm(__)m

お礼日時:2005/11/04 17:47

ANo2です。


すいません。先ほどは括弧対応のみ見て発言してしまいました。
仕様があいまいなのですが、再検索時に再度入力を促すということであれば、下記コードの直前にさらにループが必要かと思われます。
  printf("アドレスの入力-- ");
  gets(search);

そうすると、納得いくのですが・・・
    • good
    • 0

ANo2です。


さきほどは、ざっと見て答えてしまいました。
仕様があいまいなのですが、再検索時に入力を促すのであれば、
  printf("アドレスの入力-- ");
この外にさらにループが必要なのでは・・・
そうすると、やりたいことがわかる気がします。
    • good
    • 0

ループ外になっちゃってません?


fclose(fp);直前に閉じ括弧1つしか見当たりませんよね。
    • good
    • 0
この回答へのお礼

そうでした。ループ外でした。
指摘ありがとうございました。

お礼日時:2005/11/04 17:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!