fgetc ファイルから1文字入力する関数。返り値が EOF のときは、ファイルの終端、または、エラーを表す。
ungetc 入力した1文字をファイルに返す。たとえば、ファイルの入力時に1文字先を見て処理を判断することに有効。
ftell 現在参照しているファイルの上の位置を求める関数。
ファイル「data2」の中の最初の「@」の位置を調べる ⇒ list1102.c
fseek ファイルの参照位置を定める関数。
ファイル「data2」の指定位置から3文字を表示する ⇒ list1103.c
次の書式のデータファイル「data3」から、数値を抽出し表示する、そして、フォーマットに対応する部分の最後の「改行」の次のファイル位置を表示するプログラムを作成せよ。プログラムのサンプルを示す。 ⇒ prac1101.c
ここで、「非数値文字列1」および「非改行文字列1」は省略される場合がある。
さらに、「非数値文字列」の中に「#」があると「改行」までは「非数値文字列」とみなす。
データファイルの例をここに示す。⇒ data3a 、 data3b 、 data3c 、 data3d
正しく動作するとそれぞれ以下の表のように出力される。
data3a | data3b | data3c | data3d |
---|---|---|---|
100 | 100 | 100 | 100 |
200 | 200 | 200 | 200 |
300 | 300 | 300 | 300 |
19 | 12 | 27 | 39 |
ignore_line() ここでは、1文字を入力し、その結果が '\n' でないならば、同様の処理を繰り返す。
skip_to_num() まずは、「#」は考えずにプログラムを作ろう。1文字を入力し、その結果が '0' から '9' の間の文字コードでないならば、同様の処理を繰り返す。ただし、'0'から'9'の間の文字コードならば、その入力をungetcを使って返す。'0'から'9'の間の文字コードを調べるには、isdigit() という関数がある。
get_num() 数の文字を1つ読むと、その時まで読んだ数を 10 倍して加算する。たとえば、「1」を読んだ状態では「num=1」であり、加えて「2」を読むと全体で「12」と読んだことになるので「num = num * 10 + 2 = 12」となる。さらに「3」を読むと全体で「123」であり「num = num * 10 + 3 = 123」となる。「'3'」を「3」に変換するには「'3' - '0'」とすればよい。
2004.6.21 by tokuhisa