コンピュータの中央処理装置と入出力装置の間における情報のやり取りは、
ほとんどが文字を使った情報で行われます。
標準入力(stdin)への入力元も例外ではありません。
つまり、押したキーの文字コードの番号が
標準入力バッファと呼ばれる
内部のchar型記憶場所に記憶されます。
そして、scanfや、getchar、そしてguts関数は、
標準入力バッファ
が空の場合だけ入力待ちになり、このバッファに記憶された内容を読み取ります。
scanfは、第1引数の指定に従って、このバッファ内を走査(scan)し、
%直後の指示に従って文字の並びを取り出して動作します。
%c以外の指定(%d, %lf, %s)は、すべてバッファにある
半角スペースやtab や Enterの改行文字
を取り除いてから、バッファ内にある文字並びを取り出して処理します。
(半角スペースやtab や Enterの改行文字は、空白文字と呼ばれます)
%sはバッファにある空白文字を取り除いてから、
バッファ内にある文字並びをバッファから取り出して、引数のアドレスが指し示す
記憶位置から順番に記憶し、最後に文字列終端の'\0'をセットします。
つまり、空白文字で区切られる文字列入力用に使われます。
よって対応する引数には、入力される文字並びとその文字列終端'\0'を
記憶できる十分なサイズの記憶域(配列など)を用意して、そのアドレスを指定しなければ
なりません。
scanfの%sと違い、空白文字を含めた1行の文字列入力用に使われます。
プログラム | 実行結果 |
---|---|
#include<stdio.h> main() { char a[20]; gets(a); printf("入力文字列は%sです。\n", a); gets(a); printf("入力文字列は%sです。\n", a); } |
123abc 入力文字列は123abcです。 123 abc 入力文字列は 123 abcです。 |