TPY ENGINEERING VLOG

TPY ENGINEERING VLOG(C,JAVA)

*C言語* 〜45時限目〜 10進数以外で出力する・・・

〜目次〜

 

 

 

10進数以外で出力する

8進数、16進数での出力方法について学びます。

変換仕様を使うことで、

10進数以外の表記で数値を出力することもできます。

実際に以下のコードを入力してください。

sample104.c

f:id:YuyaTerayama:20180916115415p:plainーsample104の実行画面ー

10を10進数で表記すると10です。

10を8進数で表記すると12です。

10を16進数で表記するとaです。

いままでよく使っていた%dという変換仕様は、

10進数として整数を出力する指定です。

8進数として出力する場合には%o

16進数として出力する場合には%x

を使うことができます。

 

1行の入出力をする

これまで文字列などを入力する場合には、

scanf( )関数を使っていました。

しかし、

scanf( )関数を使うと問題が起きてしまう場合があります。

以下のコードを入力してみてください。

sample105.c

f:id:YuyaTerayama:20180916120424p:plainーsample105の実行画面ー

文字列を入力してください。

This is C language.

入力した文字列はThisです。

scanf( )関数で文字列を入力すると、

空白を格納できないということが、

実行画面から確認できます。

このため、

空白をもつ文字列を読み込みたい場合には、

別の入力用関数を使わなくてはいけません。

このような関数として、

標準入力から1行の入力を受け取る、

gets( )関数

があります。

実際にgets( )関数を以下のコードで使ってみます。

sample106.c

f:id:YuyaTerayama:20180916120909p:plainー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

f:id:YuyaTerayama:20180916122013p:plainーsample107の実行画面ー

文字を続けて入力してください。

This is C language.

This is C language.

Hello World!

Hello World!

Ctrl+Z     (終了します)

EOFという名前のマクロで、

定義されている値が返されるまで、

繰り返し処理を行うようになっています。

WIndowsコマンドプロンプト)では、Ctrl+Z、

UNIXなどでは、Ctrl+D、

をキーボードから入力することでEOFが返されます。

ただし、

この1文字入出力を行うコードは、

通常は1文字ずつ入出力が画面で確認できるわけではありません。

ハードディスクなどに入力を行う際には、

バッファリング(buuffering)

と呼ばれる処理が行われています。

これは、

文字を1文字ずつ入出力せずに、

まとめて入出力をする機能のことです。

尚、通常EOFは-1という整数値であらわされることが多いため、

戻りを受け取る変数は、char型ではなくint型を使います。

 

次回はファイルの仕組みから学んでいきます。

 

〜END〜