I recently stumbled upon a curious case(atleast for me, since I hadn’t encountered this before)..Consider the simple code below:-
int x;
scanf("%d",&x);
printf("%d",x);
The above code takes a normal integer input and displays the result as expected..
Now, if I modify the above code to the following:-
int x;
scanf("%d ",&x);//notice the extra space after %d
printf("%d",x);
This takes in another additional input before it gives the result of the printf statement.. I don’t understand why a space results in change of behaviour of the scanf().. Can anyone explain this to me….
From http://beej.us/guide/bgc/output/html/multipage/scanf.html:
What’s happening is scanf is pattern matching the format string (kind of like a regular expression). scanf keeps consumes text from standard input (e.g. the console) until the entire pattern is matched.
In your second example, scanf reads in a number and stores it in x. But it has not yet reached the end of the format string — there is still a space character left. So scanf reads additional whitespace character(s) from standard input in order to (try to) match it.