I/O in C++ - McGill University
Download
Report
Transcript I/O in C++ - McGill University
I/O in C++
October 7, 2008.
Junaed Sattar
Stream I/O
a stream is a flow of bytes/characters/ints or
any type of data
input streams: to the program
output streams: from the program
note I use plural
one program can have multiple I/O streams
associated
and vice-versa
Input/Output
Console based, no GUI
standard streams:
cin: standard input
cout: standard output
cerr: standard error
Extraction/Insertion
cout << “Hello world!”;
cout << “The value of i is “ << i << endl;
//endl puts a new line
cout << “Please enter your name: “;
string name;
cin >> name;
What are cin and cout?
Stream classes
Classes have methods, as we know
so does cin and cout
some common to all I/O stream classes in C++
File I/O, binary/text mode I/O, console I/O
One example
cin inputs ints, chars, null-terminated strings,
string objects
but terminates when encounters space (ascii
character 32)
workaround?
use the “get” method
Snippet
char tData[100];
// This is a method
in C++ istream classes
for
// inputting text
//including spaces
cin.get( tData, 99 );
// or
cin.get(tData,99,'\n');
Inputting “i am oh so
cool”
cin.get gets the entire
line
just cin will get “I”
space termination
Or,
Use the getline function
getline( cin, name );
File I/O
Reading from or writing to files on disk
ifstream and ofstream classes
dedicated for input and output respectively
or, use fstream
Example Files Program(filesdemo)
ofstream myofile;
myofile.open( “sample.txt” );
myofile << “This is a sample line I'm writing\n”;
myofile.close();
...
ifstream myifile;
myifile.open( “sample.txt” );
string oneLine;
getline( myifile, oneLine );
cout << oneLine;
myifile.close();
Read/Write to files (files1/2)
Similar to how we use cin and cout
remember, these are I/O streams too
myfile is a file stream object, then:
to write an int:
int i = 10;
myfile << i;
to read an int:
int i;
myfile >> i;
Binary files
As opposed to text files, they are unformatted
as ascii.
text files stores everything as ascii text strings
even numbers
binary files do not
Example: consider outout of the program in the
previous slide
Difference?
Example program
Accepts student ID (I input 1010)
Accepts name (I input Junaed)
Accepts CGPA (I input 4.5)
Save into two files, as text and binary
Storage
TEXT FILE
BINARY FILE
Binary files
Files by default are text
Different methods to write and read
requires casting (we'll see casting soon)
different data format
If time permits, we'll revisit
Failures?
If open fails?
Check before use
if( !myifile )
{
cerr << “Cannot open file!”;
exit(1);
}
End of file?
while( myifile.fail() )
{
//do your operations here
}
Random vs Sequential
Random access files
nonsequential,
as a result faster access times,
content must be suitable for random access
for example. not on network streams!
or console input
File “heads”
Access positions
one each for read and write
hence two methods:
seekg (as in “get”) for reading
seekp (as in “put”) for writing
ifstreams have seekg
ofstreams have seekp
seeking
seekg( position, mode) //(same for seekp)
position is a long integer signed offset
mode can be
ios::beg: from the beginning
ios::end from the end
ios::cur from current position
telling
tellg and tellp
returns as long integer, the position of the get and
put positions, respectively
example seeks
file.seekg( 20L, ios::beg );
file.seekp( -100L, ios::cur );
long pPosition = file.tellp();
long gPosition = file.tellg();