scanf
The scanf function
is used to read information from a standard input device (keyboard). scanf starts with a string argument and may contain
additional arguments. Any additional arguments must be pointers (to implement
calls by reference).
Program
#include <stdio.h>
main()
{
int i =
0;
int
k,j=10;
i=scanf("%d%d%d",&j,&k,&i);
printf("total
values inputted %d\n",i);
printf("The input values %d %d\n",j,k);
}
Explanation
- Statement A indicates scanf; it is used for inputting
values for i, j, k.
- You have to use the address
of the variable as an additional variable, for example, &i.
- The first argument is always
a string argument with placeholders.
- During execution of scanf, the input is processed and
it is matched against the string argument. The process is continued until
the matching is complete.
- When the first placeholder
is encountered in the string argument, a value of the specific type of the
first element constitutes a match. It is repeated for each placeholder.
- If there are one or more
whitespace characters in the first string argument between the
placeholders, any sequence of one or more whitespace characters in the
input completes a match.
- If there are other
characters in a string argument, the input should have the same character
in the same sequence in order to constitute a match.
- Once a match is not found,
the function is terminated. Matching fails if the expected input is
missing.
- scanf returns the number of
values that have been succesfully input. In this example, if you type A
instead of an integer when you are giving the value for k, then scanf returns only 1, although k gets the value 65 (the
ASCII value for A).
Points to Remember
- Input can be done using scanf.
- For scanf, the address of the
variable should be passed.
- scanf returns the number of
successful inputs.
The scanf placeholder consists of % at the beginning and a
type indicator at the end. Apart from that it can have *, a maximum field-width
indicator, and a type indicator modifier, for example,
%10.2f,%10d
Program/Example
Type indicators
- d, i Used for signed integers;
the expected argument should be a pointer to int.
- o Used for unsigned int expected's value. It should
be an integer in octal form.
- U Unsigned integer in decimal
form.
- X, X Unsigned integer in
hexadecimal form.
- E, E, f, g, G Floating-point values.
- S Character string. It
matches a sequence of non-whitespace characters terminated by an
end-of-line or end-of-file character. The additional argument should be a
pointer to char and should point to an area
that is large enough to hold the input string as well as the NULL terminator.
- C Matches the number of
characters according to a specified field-width. If no width is specified
then a single character is assumed. The additional argument must be a
pointer to char; the area pointed to should
be large enough to hold the specified number of characters.
- N Does not read any input but
writes the number of characters so far in the target variable.
Use of *
The * is
used to suppress input. For example, with %*d, if your input consists of 5
values and you want to ignore the middle 3 values, you can write:
scanf(" %d %*d %*d%*d %d ", &i,
&j)
So, if
your input is
10 20 30
40 50
it will
get the value 10 and j will get the value 50. This is
useful when you are getting the input from a file.
Field-width
It
indicates the maximum number of characters that are read into the variables.
Explanation
- scanf requires two inputs: the
first is a string argument and the second is a set of additional
arguments.
- You can define how the input
is to be taken by using placeholders.