以下のように書くと期待しない動きになる
#includeint main() { int n; char a; char b; scanf("%d", &n); scanf("%c", &a); scanf("%c", &b); return 0; }
scanfは、3回登場するが、入力は10とaの2回
10 a
最初の変数に10が代入。
改行はストリームに残っているので、char変数にaに代入される。
その後、改めて入力したaがchar変数bに代入される。
一度入力した後にcharに代入する場合、改行を毎回捨てる必要がある
①getchar()で読み捨てる
#includeint main() { int n; char a; char b; scanf("%d", &n); (void)getchar(); scanf("%c", &a); (void)getchar(); scanf("%c", &b); return 0; }
②書式文字列に半角スペースを先頭につけ、最初の改行を読み捨てる
#includeint main() { int n; char a; char b; scanf("%d", &n); scanf(" %c", &a); scanf(" %c", &b); return 0; }
③書式文字列に代入不可(*)を指定して読み飛ばす
#includeint main() { int n; char a; char b; scanf("%d", &n); scanf("%*c%c", &a); scanf("%*c%c", &b); return 0; }