• ベストアンサー

何バイトめか調べる

これは、指定したテキストに整数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; }

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.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では「文字列中の数字部分を数値にする」には、特別な関数を用いて変換しなければなりません。

noname#168725
質問者

お礼

素早い回答ありがとうございます。 詳しい回答どうもありがとうございます!

その他の回答 (2)

noname#22058
noname#22058
回答No.2

int val='3'; と初期化しましょう。

noname#168725
質問者

お礼

素早い回答ありがとうございます。 ズバリ!的確な回答どうもありがとう!

  • crew21
  • ベストアンサー率26% (58/222)
回答No.1

テキストファイルにある「3」は、数値で言うと(単なる)3ではなく51。 16進数で表現すると0x33なんです。 なので、valの初期化のところでval=0x33とするといいです。 ※考え方の基本はそれでいいと思いますが、微妙なところは調整ください。

noname#168725
質問者

お礼

素早い回答ありがとうございます。 参考になります!

関連するQ&A