There are a
number of different C input commands, the most useful of which is the scanf
command. To read a single integer value into the variable called a you can use:
scanf("%d",&a);
When the program
reaches the scanf statement it pauses to give the user time to type something
on the keyboard and continues only when users press Enter or Return, to signal
that he, or she, has finished entering the value. Then the program continues
with the new value stored in a. In this way, each time the program is run the
user gets a chance to type in a different value to the variable and the program
also gets the chance to produce a different result!
The final
missing piece in the jigsaw is using the printf function, the one we use to
print the value currently being stored in a variable. To display the value
stored in the variable a you can use:
printf("The
value stored in a is %d",a);
Note: the scanf
function does not prompt for an input. You should get in the habit of always
using a printf function, informing the user of the program what they should
type, before a scanf function.
The way it works
is that printf scans the string from left to right and prints on the screen, or
any suitable output device, any characters it encounters - except when it
reaches a % character. The % character is a signal that what follows it is a
specification for how the next variable in the list of variables should be
printed. printf uses this information to convert and format the value that was
passed to the function by the variable and then moves on to process the rest of
the control string and anymore variables it might specify. For example:
printf("Hello
World");
only has a
control string and, as this contains no % characters it results in Hello World
being displayed and doesn't need to display any variable values.
The %d, both in
the case of scanf and printf, simply lets the compiler know that the value
being read in, or printed out, is a decimal integer - that is, a few digits but
no decimal point.
If by some
accident the variable that you are trying to display happens to be a float or a
double then you will still see a value displayed - but it will not correspond
to the actual value of the float or double.
The reason for
this is twofold:
(1) The
first difference is that an int uses two bytes to store its value, while a
float uses four and a double uses eight. If you try to display a float or a
double using %d then only the first two bytes of the value are used. For
example: the program below produces -1610612736 as output!
#include
<stdio.h>
main()
{
{
float a=1.1, b=1.6, c;
c=a+b;
printf("The
answer is%d \n",c);
}
(2) The
second problem is that even if there wasn't a size difference; ints, floats and
doubles use a different binary representation and %d expects the bit pattern to
be a simple signed binary integer.
The % specifiers that you can use in ANSI C are:
- %c char single character
- %d (%i) int signed integer
- %e (%E) float or double exponential format
- %f float or double signed decimal
- %g (%G) float or double use %f or %e as required
- %o int unsigned octal value
- %p pointer address stored in pointer
- %s array of char sequence of characters
- %u int unsigned decimal
- %x (%X) int unsigned hex value
Each specifier
can be preceded by a modifier which determines how the value will be printed.
For example, %6.3f displays the float using six characters with three
digits after the decimal point, then the above mentioned code produces this output: The answer is 2.700. Notice that the six characters includes the
decimal point, space, and a - sign if there is one.
Similarly, the specifier %+10d displays an int using the next ten character locations and adds a + or - sign to the value. The specifier %-10d displays an int left justified in a ten character space.
if you print a
string using the %s specifier then all of the characters stored in the array up
to the first null will be printed. If you use a width specifier then the string
will be right justified within the space. If you include a precision specifier
then only that number of characters will be printed.
Example 1:
#include
<stdio.h>
#include<string.h>
int main()
{
char string[] =
"Hello";
printf("%s",string);
}
prints Hello,
Example 2:
printf("%25s",Hello);
prints 25
characters with Hello right justified i.e.
(20 spaces)Hello
(20 spaces)Hello
Example 3:
printf("%25.3s",Hello);
prints Hel right justified in a group of 25 spaces i.e.
(22 spaces)Hel
(22 spaces)Hel
Finally there
are some control codes in C:
1)
\b
backspace
2)
\f
formfeed
3)
\n
new line
4)
\r
carriage return
5)
\t
horizontal tab
6)
\'
single quote
7)
\0
null
If you include
any of these in the control string then the corresponding ASCII control code is
sent to the screen, or output device, which should produce the effect listed.
In most cases you only need to remember \n for new line.
Let's write a
program that adds two numbers together and prints the result.
#include
<stdio.h>
main()
{
int a,b,c;
printf("\nThe
first number is ");
scanf("%d",&a);
printf("The
second number is ");
scanf("%d",&b);
c=a+b;
printf("The
answer is %d \n",c);
}
The first
instruction declares three integer variables: a, b and c. The first two printf
statements simply display message on the screen asking the user for the values.
The scanf functions then read in the values from the keyboard into a and b.
These are added together and the result in c is displayed on the screen with a
suitable message. Notice the way that you can include a message in the printf
statement along with the value.
Type the program
in, compile it and link it and the result should be your first interactive
program.