The Simplest C Program
Let's start with the simplest possible C program and use it both
to understand the basics of C and the C compilation process. Type
the following program into a standard text editor (vi or emacs on
UNIX, Notepad on Windows or TeachText on a Macintosh). Then save
the program to a file named samp.c. If you leave off .c,
you will probably get some sort of error when you compile it, so
make sure you remember the .c. Also, make sure that your
editor does not automatically append some extra characters (like
".txt") to the name of the file. Here's the first program:
#include <stdio.h>
int main()
{
printf("This is output from my first program!\n");
return 0;
}
When executed, this program will instruct the computer to print
out the line "This is output from my first program!". Then the program
quits. You can't get much simpler than that!
| When you enter this program, position #include so
that the pound sign is in column 1 (the far left side). Otherwise,
the spacing and indentation can be any way you like it. On
most UNIX systems, you will find a program called cb,
the C Beautifier, which will format code for you. The spacing
and indentation shown above is a good example to follow. |
To compile this code take the following steps:
- On a UNIX machine, type gcc samp.c -o samp (if gcc does
not work, try cc). This line invokes the C compiler called gcc,
asks it to compile samp.c and asks it to place the executable
file it creates under the name samp. To run the program,
type samp (or, on some UNIX machines, ./samp).
- On a DOS or Windows machine using DJGPP,
at an MS-DOS prompt type gcc samp.c -o samp.exe . This
line invokes the C compiler called gcc, asks it to compile samp.c
and asks it to place the executable file it creates under the
name samp.exe. To run the program, type samp.
- If you are working with some other compiler or development system,
read and follow the directions for the compiler you are using
to compile and execute the program.
You should see the output "This is output from my first program!"
when you run the program. Here is what happened when you compiled
the program:
If you mistype the program, it either will not compile or it will
not run. If the program does not compile or does not run correctly,
edit it again and see where you went wrong in your typing. Fix the
error and try again.
Let's walk through this program and start to see what the different
lines are doing:
- This C program starts with #include <stdio.h> .
This line includes the "standard I/O library" into your
program. The standard I/O library lets you read input from the
keyboard (called "standard in"), write output to the screen (called
"standard out"), process text files stored on the disk, and so
on. It is an extremely useful library. C has a large number of
standard libraries like stdio, including string, time and math
libraries. A library is simply a package of code that someone
else has written to make your life easier (this
page discusses libraries in detail).
- The line int main() declares the main function. Every
C program must have a function named main somewhere in
the code. We will learn more about functions shortly. At run time,
program execution starts at the first line of the main
function.
- In C, the { and } symbols mark the beginning and
end of a block of code. In this case the block of code making
up the main function contains 2 lines.
- The printf statement in C allows you to send output to standard
out (for us, the screen). The portion in quotes is called the
format string and describes how the data is to be formatted
when printed. The format string can contain string literals such
as "This is output from my first program!", symbols for carriage
returns ("\n"), and operators as placeholders for variables (not
shown in this example - see the next example). If you are using
UNIX, you can type "man 3 printf" to get complete documentation
for the printf function. If not, see the documentation included
with your compiler for details about the printf function.
- The return 0; line causes the function to return an error
code of 0 (no error) to the shell that started execution. More
on this capability a bit later.
Here is another program that will help you learn more about printf:
#include <stdio.h>
int main()
{
int a, b, c;
a = 5;
b = 7;
c = a + b;
printf("%d + %d = %d\n", a, b, c);
return 0;
}
Variables
As a programmer, you will frequently want your program to
"remember" a value. For example, if your program requests
a value from the user or if it calculates a value, you will
want to remember it somewhere so you can use it later. The
way your program remembers things is by using variables.
For example:
int b;
This line says, "I want to create a space called b
that is able to hold one integer value." A variable has
a name (in this case b) and a type
(in this case int, an integer). You can store a value
in b by saying something like:
b = 5;
You can use the value in b by saying something
like:
printf("%d", b);
In C there are several standard types for variables:
- int (integer (whole number) values)
- float (floating point values)
- char (single character values like 'm' or 'Z')
We will see examples of these other types as we go
along. |
Type this program into a file and save it as "add.c". Compile
it with the line gcc add.c -o add and then run it by typing
add (or "./add"). You will see the line "5 + 7 = 12" as output.
Here is an explanation of the different lines in this program:
- The line int a, b, c; declares three integer variables
named a, b and c. Integer variables hold
whole numbers.
- The next line initializes the variable named a to the
value 5.
- The next line sets b to 7.
- The next line adds a and b and "assigns" the result
to c. The computer adds the value in a (5) to the
value in b (7) to form the result 12 and then places that
new value (12) into the variable c. The variable c
is assigned the value 12. For this reason, the "=" in this line
is called "the assignment operator".
- The printf statement then prints the line, "5 + 7 = 12". The
"%d" placeholders in the printf statement act as placeholders
for values. There are 3 "%d" placeholders, and then at the end
of the printf line there are the 3 variable names: a, b
and c. C matches up the first %d with a and substitutes
5 there. It matches the second %d with b and substitutes
7. It matches the third %d with c and substitutes 12. Then
it prints the completed line to the screen: "5 + 7 = 12", The
"+", the "=" and the spacing are a part of the format line and
get embedded automatically between the %d operators as specified
by the programmer.
This program is good, but it would be better if it read in the
values 5 and 7 from the user instead of using constants. Try this
program instead:
#include <stdio.h>
int main()
{
int a, b, c;
printf("Enter the first value:");
scanf("%d", &a);
printf("Enter the second value:");
scanf("%d", &b);
c = a + b;
printf("%d + %d = %d\n", a, b, c);
return 0;
}
Here's how this program works when you execute it:
Make the changes, then compile and run the program to make sure
it works. Note that scanf uses the same sort of format string as
printf (type man scanf for more info). Also note the &
sign in front of a and b. This is the address
operator in C: It returns the address of the variable, and it
will not make sense until we discuss pointers. You must use the
& operator in scanf on any variable of type char, int, or float,
as well as structure types (which we will get to shortly). If you
leave out the & operator, you will get an error when you run
the program. Try it so that you can see what that sort of run-time
error looks like.
How printf Works
The printf statement allows you to send output to "standard
out". For us, standard out is generally the screen (although
you can redirect standard out into a text file or another
command). Let's look at some variations to understand printf
completely. Here is the simplest printf statement:
printf("Hello");
This call to printf has a format string that tells printf
to send the word "hello" to standard out. Contrast it with
this:
printf("Hello\n");
The difference between the two is that the second version
sends the word "hello" followed by a carriage return to
standard out.
The following line shows how to output the value of a
variable using printf.
printf("%d", b);
The "%d" is a placeholder that will be replaced by the
value of the variable b when the printf statement is executed.
Often you will want to embed the value within some other
words. One way to accomplish that is like this:
printf("The temperature is ");
printf("%d", b);
printf(" degrees\n");
An easier way is to say this:
printf("The temperature is %d degrees\n", b);
You can also use multiple %d placeholders in one printf
statement:
printf("%d + %d = %d\n", a, b, c);
In the printf statement, it is extremely important that
the number of operators in the format string corresponds
exactly with the number and type of the variables following
it. For example, if the format string contains three %d
operators, then it must be followed by exactly three parameters
and they must have the same types in the same order as those
specified by the operators.
You can print all of the normal C types with printf by
using different placeholders:
- int (integer (whole number) values) uses %d
- float (floating point values) uses %f
- char (single character values like 'm' or 'Z') uses
%c
- character strings (arrays of characters, discussed later)
use %s
You can learn more about the nuances of printf on
a UNIX machine by typing "man 3 printf". Any other C compiler
you are using will normally come with a manual or a help file
that contains a description of printf. |
How scanf Works
The scanf function allows you to accept input from "standard
in", which for us is generally the keyboard. The scanf function
can do a lot of different things, but it is generally unreliable
unless used in the simplest ways. It is unreliable because
it does not handle human errors very well. But for simple
programs it is good enough and easy-to-use.
The simplest application of scanf looks like this:
scanf("%d", &b);
The program will read in an integer value that the user
enters on the keyboard (%d is for integers as is printf,
so b must be declared as an int) and place that value
into b. The scanf function uses the same placeholders
as printf:
- int (integer (whole number) values) uses %d
- float (floating point values) uses %f
- char (single character values like 'm' or 'Z') uses
%c
- character strings (arrays of characters, discussed later)
use %s
You MUST put an & sign in front of the variable used
in scanf. The reason why will become clear once you learn
about pointers. It is easy to forget the & sign, and when
you forget it your program will almost always crash when you
run it.
In general, it is best to use scanf as shown here - to
read a single value from the keyboard. Use multiple calls
to scanf to read multiple values. In any real program you
will use the gets or fgets functions instead
to read text a line at a time. Then you will "parse" the
line to read its values. The reason that you do that is
so that you can detect errors in the input and handle them
as you see fit.
|
From this discussion you can see that it is very easy to create
simple C programs. The printf and scanf functions will take a bit
of practice to be completely understood, but once mastered they
are extremely useful.
Try This!
- Modify the last example so it accepts three values instead of
two and adds all three together.
- Try deleting or adding random characters or words in one of
the programs and watch how the compiler reacts to these errors.
For example, delete the b variable in the first line of the previous
program and see what the compiler does when you forget to declare
a variable. Delete a semicolon and see what happens. Leave out
one of the braces. Remove one of the parentheses next to the main
function. Make each error by itself and then run the program through
the compiler to see what happens. By simulating errors like these
you can learn about different compiler errors, and that will make
your typos easier to find when you make them for real.
C errors to avoid
- Using the wrong character case. Case matters in C, so you cannot
type "Printf" or "PRINTF". It must be "printf".
- Forgetting to use the & in scanf.
- Too many or too few parameters following the format statement
in printf or scanf.
- Forgetting to declare a variable name before using it.
|