2

%d または %f で scanf を使用すると、空白文字がスキップされます。一方、 %c とともに使用すると、空白文字が読み取られます。なぜこれが起こるのか、誰かがこれについて詳しく説明できますか?

以下のコードのように %d または %f を使用すると、空白文字が自動的にスキップされます

#include<stdio.h>
void main(void)
{
int i;
scanf("%d ",&i);
}

このように入力を読むと

#include<stdio.h>
void main(void)
{
char ch;
scanf(" %c ",&ch);
scanf(" %c",&ch);  /*or like this*/
}

空白文字をスキップします。scanf がフォーマット指定子で異なる動作を示すのはなぜですか????

4

1 に答える 1

4

基本的に、空白文字は%dor%fには無効であるため、スキップされます。

ただし、空白文字は有効な文字であるため、%c処理を試みます。

C99 §7.19.6.2 fscanf 関数セクション 8

指定に、、、または指定子が含まれていない限り、 (関数で指定された) 入力空白文字isspaceはスキップされます。[cn

于 2013-08-26T12:07:15.647 に答える