问题
When I don\'t include white space between %d
and %c
specification in the format string of scanf()
function in the following program, and give input during run-time as \"4 h\", then the output is \"Integer = 4 and Character= .
How exactly variable \"c\"
takes the input in this case and what difference does it make if i include a white space between %d
and %c
specification ?
Code
#include <stdio.h>
int main()
{
char c;
int i;
printf(\"Enter an Integer and a character:\\n\");
scanf(\"%d %c\",&i,&c);
printf(\"Integer = %d and Character = %c\\n\",i,c);
getch();
}
回答1:
If you read the specification for scanf() carefully, most format specifiers skip leading white space. In Standard C, there are three that do not:
%n
— how many characters have been processed up to this point%[…]
— scan sets%c
— read a character.
(POSIX adds a fourth, %C
, which is equivalent to %lc
.)
Input white-space characters (as specified by
isspace
) shall be skipped, unless the conversion specification includes a[
,c
,C
, orn
conversion specifier.
Adding the space between %d
and %c
means that optional white space is skipped after the integer is read and before the (not white space) character is read.
Note that literal characters in a format string (other than white space — for example, the X
and Y
in "X%dY"
) do not skip white space. Matching such characters does not count as a successful conversion either; they do not affect the return value from scanf()
et al.
回答2:
A space before %c
specifier in scanf
instruct it to skip any number of white-spaces. In other words, read from standard input until and unless a non-white-space character or keyboard interrupt is found.
来源:https://stackoverflow.com/questions/36504135/whitespace-before-c-specification-in-the-format-specifier-of-scanf-function-in