First we need to set up a place for the user's number to be stored. That's easy. For these problems the user's number will be an integer. So we will write in function main:
int num;to set up an integer variable. You get your choice for the name.
Second: scanf. The function scanf
gets user input
(what he or she types).
If the user has already typed something, scanf
uses that,
otherwise scanf
stops and waits for the user
to type a bunch of keys
and press the enter key. Function scanf
expects
at least two arguments.
The first argument is a conversion specification. We will be using
"%d"
since
the user will be typing decimal digits possibly preceded by a sign (+ or -).
Once the user presses the enter key, scanf
scans the input characters. Initial whitespace is ignored. Whitespace is
characters like spaces, tabs, and newlines. Non-whitespace is everything
else. scanf
takes as much (digits) as it can.
It stops when it hits a non-digit.
The second argument is an address; the address where we want to store
the (converted) user's input. The ampersand (&
)
is the address operator.
Thus &num
is the address of variable num
. So we write:
int num; scanf("%d", &num);Example. Below we have a complete program. When we run it, the first
printf
prints the first line. The purpose of the first
printf
is to
tell the user what he or she is supposed to do. The next statement is
scanf
. scanf
waits for the user to enter something.
Now suppose what the user types is the second line below and then
he or she presses the enter key.
Please type a number, some spaces, a second number, then press enter. -22 33The
scanf
will skip the initial spaces. It will
pick up the characters -22 and stop when it hits the space after the 22.
It will convert the characters into an integer and finally store the
integer into variable num
.
#include<stdio.h> int main() { int num =0; printf("Please type a number, some spaces, a second number, then press enter."; scanf("%d", &num); printf("first=%d\n", num); scanf("%d", &num); printf("second=%d\n", num) }The second
printf
will print
first=-22The second
scanf
will pick up scanning the
input characters from where
the first scanf
left off. It will skip the spaces and pick up the
characters 33, stopping on the newline (not visible) at the end.
It will convert the characters into an integer and store the integer
into num
. So the third printf
will print:
second=33
#include<stdio.h> int main () { int c = 0; int num; while (1 == scanf("%d", &num) ) c += 1; printf("%d\n", c); }The function
scanf
tries to get a number
from input and store it in variable
num
. Each time it is successful with getting a number and
storing it in num
it returns the number 1. That is,
in the expression
1 == scanf("%d", &num)the value of
scanf("%d", &num)
is 1. It returns 1 because it
has gotten 1 more
input number! Thus each time scanf
is successful the expression above simplifies to:
1 == 1which is true so the loop repeats: variable
c
becomes one
larger and the condition is re-checked so scanf
is run one
more time. So long as scanf
finds only white space and integers
written with decimal digits
the loop continues until the numbers run out (EOF
: End Of
File). Then scanf
returns -1 and the condition after the
while
simplifies to
1 == -1which is false. The loop ends, we go on to the next statement that prints out the number of numbers in the file.
IMPORTANT: There are two ways to run this program. First you must write, save (make up a name, say, bd.c), and compile it.
One way to run it is with input from the keyboard. Enter the command:
a.out(Remember to press the enter key). Now enter several integers. Each time you press enter, the program processes the numbers you entered. Now hold down the control/ctrl key and type a D. This is the EOF marker in unix. The program should now print out the number of integers in its input.
A second way to run it is have the program use a file of integers as input.
Make a file of integers. Use pico to
write some integers and save them in a file (say, give it the name
data
). Then enter the command:
a.out < dataThe "
< data
" tells the operating system to take its input
from the file data
. The program should print out the number of
numbers in data
.
next: Planning Progams