- ベストアンサー
continueとbreakの位置
「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; }
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ざっと見たところ、括弧の対応が取れていないね。 多分、 if(find>=1){ から fcloseの前の行までが、while文の括弧の中に無いからだと思うよ。 間違ってたらごめん。
その他の回答 (4)
- Senna_FF
- ベストアンサー率45% (153/334)
ANo2です。 すいません。先ほどは括弧対応のみ見て発言してしまいました。 仕様があいまいなのですが、再検索時に再度入力を促すのであれば、 下記コードの前に、もう一階層ループが必要となるのではないでしょうか。 (検索に対する、画面入出力インターフェイスのメインループ) printf("アドレスの入力-- "); gets(search); 今あるのは、ファイルシーク用のループしかないですよね! ※先ほどからこの投稿を何回もしてるんですが、うまくいきません。 何度も同じような回答が反映されてしまったら、申し訳ないです。 (これは3回目です)
お礼
確かにcontinueとbreakの問題は解決できたのですが、再検索がうまくできません。あと別の問題が発生したのでそれと一緒にもう一度質問させていただきます。 何度も回答もらい迷惑かけてすいませんm(__)m
- Senna_FF
- ベストアンサー率45% (153/334)
ANo2です。 すいません。先ほどは括弧対応のみ見て発言してしまいました。 仕様があいまいなのですが、再検索時に再度入力を促すということであれば、下記コードの直前にさらにループが必要かと思われます。 printf("アドレスの入力-- "); gets(search); そうすると、納得いくのですが・・・
- Senna_FF
- ベストアンサー率45% (153/334)
ANo2です。 さきほどは、ざっと見て答えてしまいました。 仕様があいまいなのですが、再検索時に入力を促すのであれば、 printf("アドレスの入力-- "); この外にさらにループが必要なのでは・・・ そうすると、やりたいことがわかる気がします。
- Senna_FF
- ベストアンサー率45% (153/334)
ループ外になっちゃってません? fclose(fp);直前に閉じ括弧1つしか見当たりませんよね。
お礼
そうでした。ループ外でした。 指摘ありがとうございました。
お礼
その通り原因は括弧でした。 どうもありがとうございました。