C++ Prog and Appl
C++ Prog and Appl
Chapter Four
Input/Output
In all type of automated system like liquid level detectors, temperature regulators, irrigation systems, cooler,
dryer… need a good control of actuators (compressor, pump, …) in accordance with the state of various sensors
(temperature sensor, pressure sensor, humidity, …). In that kind of system, data are collected from the
environment and after the processing; outputs are assign to the various devices according to a certain algorithm
or flowchart. The system (or the program) interacts with the environment. In the same way, computer programs
can interact with their users. Until now, the programs of previous chapters provided very little interaction.
Using the standard input and output library, we will be able to interact with the user by printing messages on the
screen and getting the user's input from the keyboard.
The standard C++ library includes the header file iostream, where the standard input and output stream objects
are declared.
The standard output of a program is the screen, and the C++ stream object defined to access it is cout.
The insertion operator (<<) may be used more than once in a single statement:
cout << "Hello, I am " << age << " years old and my zipcode is " << zipcode;
If we assume the age variable to contain the value 24 and the zipcode variable to contain 90064 the output
of the previous statement would be:
The endl manipulator produces a newline character, exactly as the insertion of '\n' does.
The standard input device is usually the keyboard. Handling the standard input in C++ is done by applying the
operator of extraction (>>) on the cin stream. The operator must be followed by the variable that will store the
data that is going to be extracted from the stream. For example:
int age;
cin >> age;
15
Dr. KAMDEM Paul
Uba/HTTTC Bambili – EPET4102 (EE Level 400) C++ programming and applications
The first statement declares a variable of type int called age, and the second one waits for an input from cin (the
keyboard) in order to store it in this integer variable.
int main ()
{
int n;
cout <<"Enter an integer: ";
cin >> n;
cout <<"The value you entered is " <<i<<endl;
cout <<" and its double is " << n*2 << ".\n";
return 0;
}
The user of a program may be one of the factors that generate errors even in the simplest programs that use cin
(like the one we have just seen). Since if you request an integer value and the user introduces a name (which
generally is a string of characters), the result may cause your program to misoperate since it is not what we were
expecting from the user.
You can also use cin to request more than one datum input from the user:
In both cases the user must give two data, one for variable a and another one for variable b that may be
separated by any valid blank separator: a space, a tab character or a newline.
In order to get entire lines of characters, we use the function getline, which is the more recommendable
way to get user input with cin:
int main ()
{ string mystr;
cout << "What's your name? ";
getline (cin, mystr);
cout << "Hello " << mystr << ".\n";
cout << "What is your option ? ";
getline (cin, mystr);
cout << "I am" << mystr << " too!\n";
return 0; }
16
Dr. KAMDEM Paul
Uba/HTTTC Bambili – EPET4102 (EE Level 400) C++ programming and applications
4. Introduction to files
C++ also provides the following classes to perform output and input of data to/from files: ofstream (Stream
class to write on files), ifstream (Stream class to read from files) , fstream (Stream class to both read and write
from/to files). we can use these classes in the same way we are already used istream and ostream functions cin
and cout, with the only difference that we have to associate these streams with physical files. Let's see an
example:
// basic file operations [file example.txt]
#include <iostream> Writing this to a file
#include <fstream>
using namespace std;
int main ()
{
ofstream myfile;
myfile.open ("example.txt");
myfile << "Writing this to a file.\n";
myfile.close();
return 0;
}
This code creates a file called example.txt and inserts a sentence into it in the same way we are used to do with
cout, but using the file stream myfile instead.
5. Open a file
The first operation generally performed on an object of one of these classes is to associate it to a real file. This
procedure is known as to open a file. An open file is represented within a program by a stream object (in the
previous example this was the object myfile) and any input or output operation performed on this stream object
will be applied to the physical file associated to it. In order to open a file with a stream object we use its
member function open():
Where filename is a null-terminated character sequence of type const char * (the same type that string literals
have) representing the name of the file to be opened, and mode is an optional parameter with a combination of
the following flags:
All these flags can be combined using the bitwise operator OR (|). For example, if we want to open the file
example.bin in binary mode to add data we could do it by the following call to member function open():
ofstream myfile;
myfile.open ("example.bin", ios::out | ios::app | ios::binary);
We can declare a file object and open it at the same time by combining object construction and stream opening
in a single statement. Both forms to open a file are valid and equivalent
Each one of the open() member functions of the classes ofstream, ifstream and fstream has a default mode
that is used if the file is opened without a second argument:
For ifstream and ofstream classes, ios::in and ios::out are automatically and respectivelly
assumed. File streams opened in binary mode perform input and output operations independently of any format
considerations. Non-binary files are known as text files.
To check if a file stream was successful opening a file, we can do it by calling to the function is_open() with no
arguments. This function returns a boolean value of true in the case that indeed the stream object is associated
with an open file, or false otherwise:
6. Closing a file
When we are finished with our input and output operations on a file we shall close it so that its resources
become available again. In order to do that we have to call the stream's member function close(). This member
function takes no parameters, and what it does is to flush the associated buffers and close the file:
myfile.close();
Once this function is called, the stream object can be used to open another file.
7. Text files
Text file streams are those where we do not include the ios::binary flag in their opening mode. These files are
designed to store text and thus all values that we input or output from/to them can suffer some formatting
transformations, which do not necessarily correspond to their literal binary value.
18
Dr. KAMDEM Paul
Uba/HTTTC Bambili – EPET4102 (EE Level 400) C++ programming and applications
Data output operations on text files are performed in the same way we operated with cout:
Data input from a file can also be performed in the same way that we did with cin:
int main ()
{
string line;
ifstream myfile ("example.txt");
if (myfile.is_open())
{
while (! myfile.eof() )
{
getline (myfile,line);
cout << line << endl;
}
myfile.close();
}
else
cout << "Unable to open file";
return 0;
}
This last example reads a text file and prints out its content on the screen. Notice how we have used a new
member function, called eof() that returns true in the case that the end of the file has been reached. We have
created a while loop that finishes when indeed myfile.eof() becomes true (i.e., the end of the file has been
reached).
19
Dr. KAMDEM Paul