*C言語* 〜45時限目〜 10進数以外で出力する・・・
〜目次〜
10進数以外で出力する
8進数、16進数での出力方法について学びます。
変換仕様を使うことで、
10進数以外の表記で数値を出力することもできます。
実際に以下のコードを入力してください。
sample104.c
ーsample104の実行画面ー
10を10進数で表記すると10です。
10を8進数で表記すると12です。
10を16進数で表記するとaです。
いままでよく使っていた%dという変換仕様は、
10進数として整数を出力する指定です。
8進数として出力する場合には%o、
16進数として出力する場合には%x、
を使うことができます。
1行の入出力をする
これまで文字列などを入力する場合には、
scanf( )関数を使っていました。
しかし、
scanf( )関数を使うと問題が起きてしまう場合があります。
以下のコードを入力してみてください。
sample105.c
ーsample105の実行画面ー
文字列を入力してください。
This is C language.
入力した文字列はThisです。
scanf( )関数で文字列を入力すると、
空白を格納できないということが、
実行画面から確認できます。
このため、
空白をもつ文字列を読み込みたい場合には、
別の入力用関数を使わなくてはいけません。
このような関数として、
標準入力から1行の入力を受け取る、
gets( )関数
があります。
実際にgets( )関数を以下のコードで使ってみます。
sample106.c
ーsample106の実行画面ー
文字列を入力してください。
This is C language.
入力した文字列はThis is C language.です。
sample106では、
scanf( )関数をgets( )関数に変えています。
実行画面をみてわかる通り、
空白の部分も読み込まれています。
読み込まれた文字列は、
改行のところで¥0が付けられて配列に格納されるようになっています。
また、
gets( )関数と対になった1行の出力を行う関数として、
puts( )関数
というものがあります。
puts( )関数は文字列をそのまま出力する場合に使えるので、
gets( )関数と合わせて覚えておきましょう。
尚、puts( )関数ではprintf( )関数のように書式をつけることができません。
また、¥n記号がなくても、
最後に改行されるという違いがあります。
1文字の入出力をする
C言語ではさらに、
1行入力の代わりに、
標準出力から1文字ずつ入出力する関数もあります。
これが、
putchar( )関数
と
getchar( )関数
の2つです。
実際に上の2つの関数を使ったコードを入力します。
sample107.c
ーsample107の実行画面ー
文字を続けて入力してください。
This is C language.
This is C language.
Ctrl+Z (終了します)
EOFという名前のマクロで、
定義されている値が返されるまで、
繰り返し処理を行うようになっています。
UNIXなどでは、Ctrl+D、
をキーボードから入力することでEOFが返されます。
ただし、
この1文字入出力を行うコードは、
通常は1文字ずつ入出力が画面で確認できるわけではありません。
ハードディスクなどに入力を行う際には、
バッファリング(buuffering)
と呼ばれる処理が行われています。
これは、
文字を1文字ずつ入出力せずに、
まとめて入出力をする機能のことです。
尚、通常EOFは-1という整数値であらわされることが多いため、
戻りを受け取る変数は、char型ではなくint型を使います。
次回はファイルの仕組みから学んでいきます。
〜END〜