prog < infile
prog > outfile
prog < infile > outfile
prog1 | prog2
#include <stdio.h>
機能 | 入力 | 出力 | 備考 |
---|---|---|---|
1文字 | int getchar(); | int putchar(int c); | |
int getc(FILE *fp); | int putc(int c, FILE *fp); | ファイル | |
int fgetc(FILE *fp); | int fputc(int c, FILE *fp); | ||
文字列 | char *gets(char *s); | int puts(char *s); | |
char *fgets(char *s, int n, FILE *fp); | int fputs(char *s, FILE *fp); | ファイル | |
書式付き | int scanf(char *format, ...); | int printf(char *format, ...); | |
int sscanf(char *buf, char *format, ...); | int sprintf(char *buf, char *format, ...); | 文字列 | |
int fscanf(FILE *fp, char *format, ...); | int fprintf(FILE *fp, char *format, ...); | ファイル |
/* 入力をそのまま出力にコピーするプログラム(1文字ずつ) */ #include <stdio.h> main() { int c; /* getchar()は、ファイルの終わりにきたときは EOF(値は通常-1)を返す */ while( (c = getchar()) != EOF ) putchar(c); } /* end of pipec.c */
/* 入力をそのまま出力にコピーするプログラム(1行ずつ) */ #include <stdio.h> #define MAXLINE 256 main() { char buffer[MAXLINE]; /* gets()は、ファイルの終わりにきたときは NULL(値は0)を返す */ while( gets(buffer) != NULL ) /* gets()は'\n'を保存しない */ puts(buffer); /* puts()は末尾に'\n'を追加する */ } /* end of pipes.c */
/* 入力をそのまま出力にコピーするプログラム(バッファサイズ毎に) */ #include <stdio.h> #define MAXBUF 10 main() { char buffer[MAXBUF]; /* fgets(□, n, ○)は、○から□に最大n-1文字読み込み最後に'\0'を追加する */ while( fgets(buffer, MAXBUF, stdin) != NULL ) /* fgets()は'\n'も保存する */ puts(buffer); /* bufferに読み込まれた内容を1行に出力してみる */ /* fputs(buffer, stdout); fgets()に対応するのはfputs()であり、末尾に'\n'を追加しない */ } /* end of pipen.c */
文字 | 機能 | 備考(引数の型) | |
---|---|---|---|
scanf | printf | ||
d | 10進整数 | (int *) | (int) |
ld | (long *) | (long) | |
o | 8進整数 | 先頭の0(ゼロ)は無くても良い(unsigned int *) | 先行の0(ゼロ)なし(unsigned int) |
lo | 先頭の0(ゼロ)は無くても良い(unsigned long *) | 先行の0(ゼロ)なし(unsigned long) | |
x | 16進整数 | 先頭の0xまたは0X(ゼロ・エックス)は無くても良い(unsigned int *) | 先行の0xまたは0X(ゼロ・エックス)なし(unsigned int) |
lx | 先頭の0xまたは0X(ゼロ・エックス)は無くても良い(unsigned long *) | 先行の0xまたは0X(ゼロ・エックス)なし(unsigned long) | |
u | 符号無し10進整数 | (unsigned int *) | (unsigned int) |
lu | (unsigned long *) | (unsigned long) | |
i | 整数 | 先頭が0(ゼロ)なら8進数、先頭の0xまたは0X(ゼロ・エックス)なら16進数、それ以外は10進数(int *) | 10進整数(int) |
li | 先頭が0(ゼロ)なら8進数、先頭の0xまたは0X(ゼロ・エックス)なら16進数、それ以外は10進数(long *) | 10進整数(long) | |
c | 1文字 | 空白文字は飛ばされない、次の非空白文字を読み込むには%1sを使う(char *) | (int) |
s | 文字列(引用符なし) | 非空白文字の列にマッチ(空白文字を飛ばす)、文字列の長さ+1の領域が必要(char *) | (char *) |
e | 浮動小数点数 | 符号、小数点、指数部は省略可能(float *) | [-]m.dddddde±xx(double) |
f | [-]m.dddddd(double) | ||
g | %eと%fの折衷(double) | ||
le | 符号、小数点、指数部は省略可能(double *) | ||
lf | |||
lg | |||
% | 文字%を表す | 代入は行なわれない | %を印字 |
実行結果("Hello World"の種々の表示) |
/* printfの書式文字列(文字列編) */ #include <stdio.h> char s[] = "Hello World"; char ss[40]; int w, n; main() { printf(" :12345678901234567890\n"); printf(" :%%s: :%s:\n", s); printf(" :%%5s: :%5s:\n", s); printf(" :%%.5s: :%.5s:\n", s); printf(" :%%15s: :%15s:\n", s); printf(" :%%-15s: :%-15s:\n", s); printf(" :%%.15s: :%.15s:\n", s); printf(" :%%15.5s: :%15.5s:\n", s); printf(":%%-15.5s: :%-15.5s:\n", s); printf(" :12345678901234567890\n"); printf("\n"); printf("Input a string: "); scanf("%s", ss ); printf("Input width and number: "); scanf("%d %d", &w, &n ); printf(":12345678901234567890\n"); printf(":%*.*s: :%%%d.%ds:\n", w, n, ss, w, n ); } /* end of printfs.c */
実行結果(123及びπの種々の表示) |
/* printfの書式文字列(数値編) */ #include <stdio.h> #include <math.h> #define MORE int i = 123; int ii; double d = 3.1415926535; double dd; int e, w, n; main() { #ifdef MORE printf(" %%d, %%o, %%x\n"); printf("%d,%o,%x\n", i, i, i ); printf(" %%05d, %%06o, %%04x\n"); printf("%05d,%06o,%04x\n", i, i, i ); printf(" %%e, %%f, %%g\n"); printf("%e,%f,%g\n", d, d, d ); printf("\n"); printf("%%d:\n1234567890\n"); for( e = 0; e < 5; e++ ) { ii = i * pow( 10.0, e ); printf("%d:\n", ii ); } printf("%%5d:\n1234567890\n"); for( e = 0; e < 5; e++ ) { ii = i * pow( 10.0, e ); printf("%5d:\n", ii ); } printf("%%05d:\n1234567890\n"); for( e = 0; e < 5; e++ ) { ii = i * pow( 10.0, e ); printf("%05d:\n", ii ); } printf("%%10d:\n1234567890\n"); for( e = 0; e < 5; e++ ) { ii = i * pow( 10.0, e ); printf("%10d:\n", ii ); } printf("%%-10d:\n1234567890\n"); for( e = 0; e < 5; e++ ) { ii = i * pow( 10.0, e ); printf("%-10d:\n", ii ); } printf("\n"); printf(" %%e, %%f, %%g\n"); for( e = -6; e < 7; e++ ) { dd = d * pow( 10.0, e ); printf("%e,%f,%g\n", dd, dd, dd ); } printf(" %%.4e, %%.4f, %%.4g\n"); for( e = -6; e < 7; e++ ) { dd = d * pow( 10.0, e ); printf("%.4e,%.4f,%.4g\n", dd, dd, dd ); } printf(" %%10.2e, %%10.2f, %%10.2g\n"); printf("1234567890:1234567890:1234567890:\n"); for( e = -6; e < 7; e++ ) { dd = d * pow( 10.0, e ); printf("%10.2e,%10.2f,%10.2g\n", dd, dd, dd ); } #else printf("\n"); printf("Input a number: "); scanf("%lf", &dd ); printf("Input width and number: "); scanf("%d %d", &w, &n ); printf(":12345678901234567890\n"); printf(":%*.*e: :%%%d.%de:\n", w, n, dd, w, n ); printf(":%*.*f: :%%%d.%df:\n", w, n, dd, w, n ); printf(":%*.*g: :%%%d.%dg:\n", w, n, dd, w, n ); #endif } /* end of printfn.c */
実行結果(d) |
実行結果(e,f,g) |
実行結果(「#define MORE」をコメントアウト) |