標準入出力

標準入出力としてキーボード入力と画面出力をみていきます。


標準入力

標準入力(キーボード入力)するには次の関数を使用します。


標準入力 関数一覧
関数名 書式 処理
getchar() int getchar(void); 標準入力(キーボード)からの入力値を「EOF」※1まで1文字づつ取得します。エラー時は「EOF」を返します。
gets() char *gets(char *str); 標準入力(キーボード)からの入力値を「EOF」※1まで1行づつ取得して、その文字列の先頭アドレスを引数のchar型ポインタ(*str)に渡すと共に戻り値としても返します。エラー時は「EOF」を返します。
但し現在では読み込む長さを指定できる「fgets()」の使用が推奨されています。
fgets() char *fgets(const char *str, int n, FILE *stream); 「*stream」で示されるストリーム※2から「n-1」文字を取得し「\0」を付加して、その文字列の先頭アドレスを引数のchar型ポインタ(*str)に渡すと共に戻り値としても返します。
scanf() int scanf(char *format,...) ; 標準入力(キーボード)からの入力値を書式指定した文字列として取得します。
第2引数以降は書式指定文字列※3の変換指定子の数だけ変数を指定します。
戻り値は成功時には入力データの数を返し、失敗時はEOFを返します。

※1「EOF」を入力するには「Ctr + Z」(Windows系)キー、「Ctr + D」(Unix系)キーを押下します。ちなみに殆どのコンパイラーでは<stdio.h>内で「EOF」は「-1」と定義されています。

※2「ストリーム」とは「データの流れ」を表現する用語です。標準入力するには「stdin」を指定します。

※3 「書式指定文字列」とは変換指定子やエスケープシーケンス等を含む文字列の事で、これにより入力時や出力時の書式を指定します。詳しくは下記の「scanf()」で使用される書式指定文字列を参照してください。


「scanf()」で使用される書式指定文字列

「scanf()」で使用される書式指定文字列は次の「変換指定子」で形成されています。変換指定子の仕様は次の通りです。


%変換指定子

変換指定子一覧
記号 意味
c, C 1文字
s, S 文字列
d 符号付整数(10進数)
i 符号付整数(先頭が0のとき8進数、0xのとき16進数、それ以外は10進数)
u 符号なし整数(10進数)
o 符号なし整数(8進数)
x, X 符号なし整数(16進数)
e, E 符号付浮動小数点([-]d.dddde[+/-]ddd形式)
f 符号付浮動小数点([-]dddd.dddd形式)
g, G 精度をしてします。これにより指定された精度以上のときはfの形式からeの形式で取得します。
p ポインタ
n 入力文字数
[・・・] ”・・・”に入る文字が入力されている間値を取り込みます。
[^・・・] ”・・・”に入る文字が入力されると値の取り込みを終了します。

次のように「変換指定子」にはオプションを使用することも出来ます。([ ]内は省略可能です。)

%[代入抑止][最大フィールド幅][型修飾子]変換指定子

オプション
[代入抑止] ”*”で指定された箇所は取り込みを行いません。
[最大フィールド幅] 取得する文字数を指定します。
[型修飾子] ”h”はshotの時、”l,L”はlongの時に指定します。

標準入力の使用例

・サンプルソース(sample1101.c)

#include <stdio.h>

int main() {
    char str[256];
    printf("256文字以内でなんか入力してください。\n");
    scanf("%s", str);
    printf("入力値は「%s」です。\n", str);

    return 0;
}

・実行結果

C:\dev\c>sample1101 [Enter]
256文字以内でなんか入力してください。
abc [Enter]
入力値は「abc」です。
        

▲PageTop

標準出力

標準出力(画面出力)するには次の関数またはマクロを使用します。


関数・マクロ一覧
関数・マクロ名 書式 処理
fputc() int fputc(int c, FILE *stream); キャラクタ(ASCIIコード)c をストリーム※2に出力します。
putc() int putc(int c, FILE *stream); 「fputc」と同機能のマクロです。
putchar() int putchar(int c); キャラクタ(ASCIIコード)c を標準出力(画面出力)します。
fputs() int fputs(const char *str, FILE *stream); 文字列 s をストリーム※1に出力します。
puts() int puts(const char *str); 文字列 s を標準出力(画面出力)します。
fprintf() int fprintf(FILE *stream, const char *format,...); 書式指定文字列※2をストリームに出力します。
第2引数以降は出力元となる変数を変換指定子の数だけ指定します。
printf() int printf(const char *format,...); 書式指定文字列を標準出力(画面出力)します。
第2引数以降は出力元となる変数を変換指定子の数だけ指定します。

※1「ストリーム」とは「データの流れ」を表現する用語です。標準入力するには「stdin」を指定します。

※2「書式指定文字列」とは変換指定子やエスケープシーケンス等を含む文字列の事で、これにより入力時や出力時の書式を指定します。詳しくは下記の「printf()」で使用される書式指定文字列を参照してください。


「printf()」で使用される書式指定文字列

「printf()」で使用される書式指定文字列は次の「変換指定子」で形成されています。変換指定子の仕様は次の通りです。


%変換指定子

変換指定子一覧
記号 意味
c, C 1文字
s, S 文字列
d 符号付整数(10進数)
i 符号付整数(先頭が0のとき8進数、0xのとき16進数、それ以外は10進数)
u 符号なし整数(10進数)
o 符号なし整数(8進数)
x, X 符号なし整数(16進数)
e, E 符号付浮動小数点([-]d.dddde[+/-]ddd形式)
f 符号付浮動小数点([-]dddd.dddd形式)
g, G 精度をしてします。これにより指定された精度以上のときはfの形式からeの形式で取得します。
p ポインタ

次のように「変換指定子」にはオプションを使用することも出来ます。([ ]内は省略可能です。)

%[フラグ][最小フィールド幅][精度][型修飾子]変換指定子

オプション
[フラグ] 「+」:符号を付加を付加します。
「-」:左詰にします。
「空白」:先頭に空白を付加します。
「0」:最小フィールドまで0埋めします。
「#o」:8進表示(先頭に0を付加)します。
「#ox」:16進表示(先頭に0xを付加)します。
[最小フィールド幅] 10進数の整数または、「*」で出力の桁数を指定します。「*」を指定したときは第2引数で桁数を指定します。
[精度] 変換指定子が「%d」、「%i」、「%u」、「%o」、「%x」、「%X」のときは最小の桁数を表します。
変換指定子が「%f」、「%e」、「%E」のときは小数点以下の桁数を表します。
変換指定子が「%g」、「%G」のときは最大有効桁数を表します。
変換指定子が「%s」のときは出力される最大バイト数を表します。
[型装飾子] 「h」はshotの時、「l」,「L」はlongの時に指定します。

標準出力の使用例

・サンプルソース(sample1102.c)

#include <stdio.h>

int main() {
    fputc(0x41, stdout);
    fputc(0xD, stdout);
    fputc(0xA, stdout);
    putc(0x42, stdout);
    putc(0xD, stdout);
    putc(0xA, stdout);
    putchar(0x43);
    putchar(0xD);
    putchar(0xA);
    fputs("This is 「fputs()」\n", stdout);
    puts("This is 「puts()」");
    fprintf(stdout, "This is 「fprintf()」\n");
    printf("This is 「printf()」\n");

    return 0;
}

・実行結果

C:\dev\c>sample1102 [Enter]
A
B
C
This is 「fputs()」
This is 「puts()」
This is 「fprintf()」
This is 「printf()」
        

▲PageTop