- ベストアンサー
条件式を満たさないファイル読み込みプログラムの分岐方法とソースコード
- 条件式を満たさないファイル読み込みプログラムでの分岐方法を教えてください。
- また、以下のソースコードを提供します。
- #include <stdio.h> #include <string.h> void main(void){ FILE *fp,*fp2; char buf[100],buf2[100]; fp=fopen("yasa.txt","r+"); while( fgets( buf, 100, fp ) != NULL ){ if(strcmp(buf,"じゃがいも")==0){ fp2=fopen("kuda.txt","r+"); while( fgets( buf2, 100, fp2 ) != NULL ){ printf("%s",buf2); } fclose(fp2); } else{ printf("%s",buf); } } fclose(fp); }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
検索してちゃんと自分で調べて欲しいところですが…… >そうです何故か bufに入っているのが"じゃがいも\n"になっているハズですので、 "じゃがいも"と等価にはなりません。 # 改行コードが入っていますから同一じゃないです。 >例として質問用のプログラムは書いたのですが元々判定してほしい文字列はじゃがいもではなく!chat!名のですが入っていませんか? ASCIIということでいいかと。 日本語入っていたりすると、メモリの内容を見る場合に問題がある場合がありますので……。 >メモリ上とはどういうことなのでしょうか? buf[]の配列の中身…です。 char buf[100],buf2[100]; の後に int i; を追加、 while( fgets( buf, 100, fp ) != NULL ){ の後に for(i = 0;buf[i] != '\0';i++){ printf("%02X ", buf[i]); } とでも追加すると、改行コードがbufに含まれているコトが確認できるかと思います。 # 文字コードを16進数2桁で表示するループになっています。 で……buf[]やbuf2[]から改行コードを取り除く処理を入れた場合、 printf("%s",buf2); printf("%s",buf); で改行されなくなりますので注意して下さいな。
その他の回答 (1)
- Wr5
- ベストアンサー率53% (2173/4061)
>if(strcmp(buf,"じゃがいも")==0){ が、真にならない。 ということでしょうか? >while( fgets( buf, 100, fp ) != NULL ){ >while( fgets( buf2, 100, fp2 ) != NULL ){ 「fgets 改行」で検索してみることを勧めます。 # あとは…読み込んだデータがメモリ上でどうなっているのか確認してみるのもよいかと。 # その際には日本語は除いてASCIIにしておいた方がいいでしょうけどね…。
補足
<<if(strcmp(buf,"じゃがいも")==0){ が、真にならない。 ということでしょうか? そうです何故か <<# その際には日本語は除いてASCIIにしておいた方がいいでしょうけどね…。 ASCIIはアルファベットは入ってますか 例として質問用のプログラムは書いたのですが元々判定してほしい文字列はじゃがいもではなく!chat!名のですが入っていませんか? <<あとは…読み込んだデータがメモリ上でどうなっているのか確認してみるのもよいかと。 メモリ上とはどういうことなのでしょうか? とりあえず if(strcmp(buf,"じゃがいも")==0){ を if(strcmp(buf,"じゃがいも")!=0){ にかえたら両方のファイルを同時に読み込んでいることは確認できましたがメモリ上で読み込んだ事にはなりませんか? <<「fgets 改行」で検索してみることを勧めます。 とりあえず検索してみます
補足
>>検索してちゃんと自分で調べて欲しいところですが…… >そうです何故か bufに入っているのが"じゃがいも\n"になっているハズですので、 "じゃがいも"と等価にはなりません。 # 改行コードが入っていますから同一じゃないです。 そういえば以前もファイルの文字列をコピーするときに\nがどうのこうので回答があった気がします まさかifの判定でも\nがはいっているとは・・・・ 私はファイルの操作関連の知識が微妙にあるようでないってことですね また同じようなところでミスしています 調べなくてはいけないことがたまっていまして、少々調べるのが後回しにしていました 不快に思ったらすみませんね >>>メモリ上とはどういうことなのでしょうか? buf[]の配列の中身…です。 メモリ上っていうのはそういう意味なのですか ってことはメモリブロックとはbuf[]の配列の単位の事ですか意外なところでどういう意味なのか分かりました 教えていたいただきありがとうございました <<で……buf[]やbuf2[]から改行コードを取り除く処理を入れた場合、 printf("%s",buf2); printf("%s",buf); で改行されなくなりますので注意して下さいな。 依然そのことでやたらとバグを出した気がします 注意していただきありがとうございました