printf 書式指定で、データの内容を表示させる事ができる 10 (整数値) -> %d 12.34 (浮動小数点数) -> %f 書式で、型を指定するだけでなく、出力形式も指定できる 97 (整数値) -> %d => 97 97 (整数値) -> %c => 'a' : 整数値を文字として出力 10 (十進整数値) -> %d => 10 (十進数) 10 (十進整数値) -> %o => 12 (八進数) 10 (十進整数値) -> %x => a (十六進数) <注意点> 整数値を浮動小数点で出すと意味不明な表示になる 逆も真 基本は、型と書式を揃える必要がある scanf printf の逆で標準入力から数値を変数に取り込む事ができる 入力を人間がやると、間違える可能性がある -> scanf の指定した形式と異る入力が来る可能性がある 思った通りには動かない事が多い sscanf (sprintf) sscanf ( 文字列, 書式指定, &変数.. ) scanf が、書式指定に従って、標準入力から入力された文字列から、値を取出し、変数に代入するのに対し、 sscanf は、最初に指定された文字列から値を取り出す sscanf ( "123", "%d", &i ) ⇔ scanf ( "%d", &i ) + キーボードから 123[Enter] == sscanf ( "a123", "%d", &i ); -> i には 0 が入る why ? sscanf は "a123" から整数値を取り出そうとする ( %d という書式指定があるから.. ) ところが、"a123" の先頭の "a" は、10 進数を表す文字ではない => "" が指定されたと解釈する 中身が空っぽなので 0 とした sscanf ( "12a34", "%d", &i ); -> i には 12 が入る sscanf ( "a123", "a%d", &i ); -> i に 123 が入る 入力 : "a123" |^^^ | | |vv 書式 : "a%d" %d <-> 123 => i に代入 sscanf ( "b123", "a%d", &i ); -> i に 0 (つまり、上手く読み出せない) !! i=123; !! printf ( "(%d)", i ) => (123) => scanf ( "(%d)", &j ) !! j <- 123