#include<stdio.h>
void main()
{
char a,b;
printf("enter a,b\n");
scanf("%c %c",&a,&b);
printf("a is %c,b is %c,a,b");
}
1. 2 つの書式指定子の間にある空白は、コンピュータに何をするように指示しますか? 2. %c 以外の %d のようなフォーマット指定子は、そこから読み取る前に入力バッファを消去しますか?
#include<stdio.h>
void main()
{
char a,b;
printf("enter a,b\n");
scanf("%c %c",&a,&b);
printf("a is %c,b is %c,a,b");
}
1. 2 つの書式指定子の間にある空白は、コンピュータに何をするように指示しますか? 2. %c 以外の %d のようなフォーマット指定子は、そこから読み取る前に入力バッファを消去しますか?
1. 2 つの書式指定子の間にある空白は、コンピュータに何をするように指示しますか?
フォーマット文字列の空白はscanf
、最初の非空白文字 (未読のまま) まで空白文字を読み取る (そして破棄する)ように指示します1。そう
scanf("%c %c",&a,&b);
単一の文字をa
(空白かどうかに関係なく) に読み込み、空白をスキップして、次の非空白文字を に読み込みますb
。
2. %c 以外の %d のようなフォーマット指定子は、そこから読み取る前に入力バッファを消去しますか?
ここで何を意味するのかよくわかりません-d
先頭の空白をスキップして、最初の空白以外の文字から読み取りを開始し、空白でc
あるかどうかに関係なく次の文字を読み取ります。入力ストリームをフラッシュすることも、ディレクティブが失敗した場合にターゲット変数に書き込むこともありません (たとえば、入力ストリーム内の次の非空白文字が数字でないd
場合、ディレクティブは失敗し、それに対応する引数はディレクティブは更新されません)。
ウィキペディアによると
whitespace: 空白文字は、ゼロ個以上の空白文字のスキャンをトリガーします。空白文字の数とタイプは、どちらの方向でも一致する必要はありません。
"%d" は、整数が見つかるまで空白をスキップします。
"%c" は 1 文字を読み取ります (スペースは文字なので、スキップしません)。