質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

3492閲覧

独習Cの解答例でどうやって正しく動くのか分からないプログラム文があります

tada_tadaa

総合スコア110

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2016/02/05 05:50

独習Cという本でC言語を勉強しているのですが、次のような問題があります。
練習問題9.6.2
コマンドラインで指定されたファイルから、やはりコマンドラインで指定された整数値を検索する
プログラムを作成してください。値が見つかったら、それがファイルの先頭から何バイト目にある
かを表示してください。

で、解答例として以下のようなものが載っていました。

c

1 2/* apdC-135.c */ 3#include <stdio.h> 4#include <stdlib.h> 5 6int main(int argc, char *argv[]) 7{ 8 FILE *fp; 9 unsigned char ch, val; 10 11 if(argc!=3) { 12 printf("使用法: <プログラム名> <ファイル名> <整数値>"); 13 exit(1); 14 } 15 16 if((fp = fopen(argv[1], "rb"))==NULL) { 17 printf("ファイルを開くことができません\n"); 18 exit(1); 19 } 20 21 val = atoi(argv[2]); 22 23 while(!feof(fp)) { 24 ch = fgetc(fp); 25 if(ch == val) 26 printf("%ld のアドレスに値が見つかりました\n", ftell(fp)); 27 } 28 29 fclose(fp); 30 31 return 0; 32} 33

で、このプログラム文をコマンドラインから次のように実行します。

apdc-135.c.exe aaa.txt 3

aaa.txtの中身は
abcdefghijklmnopqrstu
vwxyz
0123456789
です。予想では
33(らへん)のアドレスに値が見つかりました
と、コマンドプロンプトに表示されると思ってたのですが1行空白があるだけで何も表示されません。
僕のやり方が間違っているのでしょうか?それともプログラム文がおかしいのでしょうか?
本の正誤表には該当するものはありませんでした。
http://www.shoeisha.co.jp/book/detail/9784798102962

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

aaa.txtの中身がASCIIコードだからです。
数値の3は、ASCIIコードでETXなので、aaa.txtには含まれていないようですね。
文字の'3'は10進数で51ですので、apdc-135.c.exe aaa.txt 51とすれば、'3'のファイル内オフセットが表示されると思います。

投稿2016/02/05 05:58

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tada_tadaa

2016/02/05 06:16

回答ありがとうございます。 たしかに apdc-135.c.exe aaa.txt 51 で 34 のアドレスに値が見つかりました と表示されました。 問題文に整数値を指定と書いてあるので、てっきり2桁の数値もOKのような回答を考えていま した。でも、この方法だと1桁の数値しか検索できないですね。 とりあえず疑問が解決して良かったです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問