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();
}
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, ornconversion 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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With