概ね方位不定だが多分割と偏っている
スポンサーサイト
--年--月--日 (--) | 編集 |
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


C 1文字単位の入出力
2006年07月13日 (木) | 編集 |
何のことやら、という感じではある。
だがしかし、今の俺はとりあえずそういうことにしておいて話を進めれば、いずれその問題は解決する(場合もある)という事を知っている。

ちなみにとりあえずそういうことにしておいて重要な部分を聞き忘れた為に、後になって随分と面倒臭い事になり、自分を呪い殺したくなるほど後悔したこともある事を幸いにして俺はまだ忘れてはいない。


つまり状況判断が大事ってことだな。
当然過ぎる上に抽象的過ぎて何の役にも立ちやしねー。

今回はgetcharとputcharという関数?の話だ。
printfやscanfで文字や数値や文字列等を入出力出来たわけだが、getcharやputchrは1文字単位の入出力を行うのに便利な関数なんだそうだ。というか関数ではなく正確にはマクロと呼ばれる定義らしい。そういうものにしておけ、と初期に言っていたあのマクロだな。

ページを超えて、一体何度俺を煩わせるというのか…そういうものにしておけとされたモノ!

って言ったの俺か。すまない、俺によってそういうことにされておいたモノ。

で、マクロについては更に後の後の後の後の後くらいに説明するらしいので、とりあえずは関数と同じようなものだと思っておけだそうだ。
哀れな話だな、関数と同じようなものだと思っておけとされたマクロ。
だが恨むなら入門書を恨んでくれ。あるいはややこしいその自分の立場を。

getcharとputcharの話に戻ろう。
getcharを用いて1文字を入力するには、

c=getchar();

putcharを用いてその文字を出力するには、

putchar(c);

と記述する。
イマイチよく分からないので、実際に書いて実行してみよう。

test_gp.jpgtest_gp2.jpg
こんな感じ

ううむ…やはりよく分からない。printfとscanfと何が違うんだこれ。
分からんので実際に比較してみた。

test_gp3.jpgtest_gp4.jpg
こんな感じ

成る程。
getcharやputcharと違って、printfとscanfは宣言型を無視出来ないのか。
って違うか。getcharやputcharが書式制御文字列を必要としないのか。
割と一目瞭然だったな。というかやる前に気付くべきだった。

また、putcharは文字や整数値を出力するので、printfと違って定数(これはイマイチ分からん)や式、エスケープ文字を扱えるのだそうだ。ってprintfがいつも扱っているのはそういや変数だったか。そういうことなのかね。

エスケープ文字とやらが何なのかというと、\の後に決められた文字か値を入れて、プリンタや画面に特定の役割を働かせるらしいんだが、その\のことをエスケープ文字という…のか?
俺にもよく分からん。とりあえずそういうことにしておいてくれ。またか。
未来の俺への負債がどんどん増えていく…!

定義は不可解でも、働きは割と分かり易いので挙げておく。


\a あるいは \0x07 …ベルを鳴らす(alert)
\b あるいは \0x08 …バックスペース(back space)
\f あるいは \0x0c …改頁(form feed)
\n あるいは \0x0a …復帰改行(new line)
\とr あるいは \0x0dで …復帰(carriage return)
\t あるいは \0x09で …水平(horizontal tab)
\v あるいは \0x06 …垂直タブ(vertical tab)
\DDD あるいは0DDD …8進数DDDで示される任意の文字(何のことやら)
\xHHH あるいは0xHHH …16進数HHHで示される任意の文字(何のことやら2)



例によって実際に試してみた。

test_gp5.jpgtest_gp6.jpg
getchを挟んでいるのは入力待ちで観察する為

が…これをどう説明したものやら。
画面上では単に変な文字が1個出ているだけだが実際の一連の変化は、最初のputcharでaを出力し、2個目のputcharで音を鳴らし、3個目のputcharで1個戻り、4個目のputcharで全部消え(改頁ってこういうことかよ)、5個目のputcharで何も起こらず(復帰、とのことだったのだが)、6個目のputcharで右横に移動し(水平タブだしな)、最後のputcharで変な文字が画面に残った、というものである。

ううむ…意味分からんね。
ま、頑張ってまとめてみよう。

c=getchar();で1文字を入力する
putchar(c);でcに入力された文字を出力する
putchar('');で直接1文字出力する
putchar('');はエスケープ文字も扱える
\aはベルを鳴らす
\bはカーソルを1文字分戻す
\fは改頁ってことで全部消しやがった
\nはお馴染み、改行する
\とrは復帰らしいのだが意味分からん…と思ったら、html形式にしたらこの付近の一文が消えていた。何この怪奇現象。
\tは水平タブ。空白4つ分か? 移動する
\vは垂直タブ。だが縦に移動せず変な文字だけ残した


以上。
今回はちと分からんことが多いな…
ま、そういうものだと思っておこう。いずれ未来の俺が理解してくれるだろうよ。
スポンサーサイト

コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。