標準入出力としてキーボード入力と画面出力をみていきます。
標準入力(キーボード入力)するには次の関数を使用します。
関数名 | 書式 | 処理 |
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()」で使用される書式指定文字列は次の「変換指定子」で形成されています。変換指定子の仕様は次の通りです。
%変換指定子
記号 | 意味 |
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」です。
標準出力(画面出力)するには次の関数またはマクロを使用します。
関数・マクロ名 | 書式 | 処理 |
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()」で使用される書式指定文字列は次の「変換指定子」で形成されています。変換指定子の仕様は次の通りです。
%変換指定子
記号 | 意味 |
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()」