### printfの機能
文字列や変数値を出力する機能
他にもputchar(), puts()などがあるが、printf()でも記述できる。
putchar(ch);
puts(ss);
printf(“%c”, ch);
### printfの変換指定
%o: 8進数出力
%d: 10進数出力
%x: 16進数出力
%X: 16進数出力
%ld: long型数値を10進数で出力
%f: 不動小数点として出力
%e: 指数形式で出力
%E: 指数形式で出力
%c: 文字として出力
%s: 文字列として出力
%p: アドレスを表示
int main(void){ char c; int n; long l; float f; double d; char s[20] = "abcde"; c = 65; printf("c: %c\n", c); //文字列 printf("10: %d\n", c); //10進数 n = 66; printf("c: %c\n", n); //文字列 printf("10: %d\n", n); //10進数 n = 1000; printf("8: %o\n", n); //8進数 printf("10: %d\n", n); //10進数 printf("16x: %x\n", n); //16進数 printf("16X: %X\n", n); //16進数 英大文字 l = 1234567890; printf("ld: %ld\n", n); //long f = 12.34F; printf("f: %f\n", n); //浮動小数点数 printf("e: %e\n", n); //指数形式 printf("E: %E\n", n); //指数形式 英大文字 d = 56789.12; printf("f: %f\n", d); //浮動小数点数 printf("e: %e\n", d); //指数形式 printf("E: %E\n", d); //指数形式 英大文字 printf("s: %s\n", s); // 文字列 printf("c=%d n=%d s=%s", c, n, s); return 0; }
### printfのオプション
%d: 必要な幅で出力
%8d: 8文字で出力
%-8d: 左寄せ8文字幅で出力
%2d: 指定値の方が小さくても必要幅は確保
%8X: 先行スペース文字を入れて8文字
%08X: 先行0を入れて8文字出力 ※16進数に便利
%12f: 小数点を入れて12桁
%9.2f:小数点を入れて9桁、小数点以下2桁
%9.f: 整数部のみ9桁
### scanfの機能
scanf()は書式付き入力を行う関数
scanf(書式指定文字列, 変数アドレスの並び);
格納先は変数名ではなく変数のアドレス
※単純変数の場合は&を付け、配列変数の場合は&は不要
### scanfの変数指定
%o: 8進数
%d: 10進数
%ld: long型変数に10進数読み込み
%x: 16進数
%f: float型
%lf: double型変数
%c: 1文字
%s: 文字列
int main(void){ int i; float f; double d; long l; char s[80]; printf("1文字入力:"); scanf("%c", &i); printf("1文字出力=%c\n", i); printf("文字列入力:"); scanf("%s", s); printf("文字列出力=%s\n", s); printf("8進入力:"); scanf("%o", &i); printf("10進出力=%d\n", i); printf("10進入力:"); scanf("%d", &i); printf("10進出力=%d\n", i); printf("16進入力:"); scanf("%x", &i); printf("10進出力=%d\n", i); printf("long入力:"); scanf("%ld", &l); printf("long出力=%ld\n", l); printf("float入力:"); scanf("%f", &f); printf("float出力=%f\n", f); printf("double入力:"); scanf("%lf", &d); printf("double出力=%16f\n", d); return 0; }
$ ./dev
1文字入力:A
1文字出力=A
文字列入力:abc
文字列出力=abc
8進入力:11
10進出力=9
10進入力:9
10進出力=9
16進入力:11
10進出力=17
long入力:1234567890
long出力=1234567890
float入力:12.3456
float出力=12.345600
double入力:123456.78901
double出力= 123456.789010
gets()は空白を含む文字列を読み込むが、scanf()は空白類文字列に出会うと終了
### 標準入力と標準出力
リダイレクトを指示すると、ファイルから入力し、ファイルから出力するようになる
int main(void){ char ss[256]; gets(ss); puts(ss); return 0; }
$ ./dev
abcd
abcd
$ ./dev >aa.txt
hogehoge
$ ./dev
$ ls
aa.txt bb.txt dev hello.c
$ cat bb.txt
hogehoge
標準出力の意味がここでやっとはっきりしました。