- ベストアンサー
何バイトめか調べる
これは、指定したテキストに整数3があった場合、 ファイル先頭から何バイトか調べるプログラムです。 実行しても何も表示されませんでした。 どこが間違ってるか教えてください。 a.txtに、abcdefghij123 と書かれているとします。 FILE *fp; int ch,val=3; fp=fopen("a.txt","rb") while( !feof (fp) ){ ch=fgetc(fp); if(ch==val) printf("%ld", ftell(fp) ); } fclose(fp); return 0; }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
このプログラムは、a.txtの中に'\x03'が、つまり、コントロールコードのCtrl+Cがあった時だけ、その位置を表示します。a.txtの中には'\x03'は存在しないので、何も表示しないで終ります。 もし、文字の「3」がある時だけ表示したいなら、 int ch,val=3; を int ch,val=51; にしなければなりません。「51」は文字「3」のアスキーコードで、fgetcが文字「3」を読み込んだ場合、chは「51」になります。 なお、 int ch,val='3'; でも可です。Cコンパイラは「'3'」と書かれた部分は「51」に変換します。 なお、Cでは「文字列中の数字部分を数値にする」には、特別な関数を用いて変換しなければなりません。
その他の回答 (2)
int val='3'; と初期化しましょう。
お礼
素早い回答ありがとうございます。 ズバリ!的確な回答どうもありがとう!
- crew21
- ベストアンサー率26% (58/222)
テキストファイルにある「3」は、数値で言うと(単なる)3ではなく51。 16進数で表現すると0x33なんです。 なので、valの初期化のところでval=0x33とするといいです。 ※考え方の基本はそれでいいと思いますが、微妙なところは調整ください。
お礼
素早い回答ありがとうございます。 参考になります!
お礼
素早い回答ありがとうございます。 詳しい回答どうもありがとうございます!