Thinking in C++ Vol 2 - Practical Programming |
Prev |
Home |
Next |
To grab input a line at a time, you have three choices:
The member function get( )
The member function getline( )
The global function getline( ) defined in the <string>
header
The first two functions take three arguments:
1. A pointer to a character buffer in which to store the result.
2. The size of that buffer (so it s not overrun).
3. The terminating character, to know when to stop reading input.
The terminating character has a default value of '\n',
which is what you ll usually use. Both functions store a zero in the result
buffer when they encounter the terminating character in the input.
So what s the difference? Subtle, but important: get( )
stops when it sees the delimiter in the input stream, but it doesn t
extract it from the input stream. Thus, if you did another get( )
using the same delimiter, it would immediately return with no fetched input.
(Presumably, you either use a different delimiter in the next get( )
statement or a different input function.) The getline( ) function,
on the other hand, extracts the delimiter from the input stream, but still
doesn t store it in the result buffer.
The getline( ) function defined in <string>
is convenient. It is not a member function, but rather a stand-alone function
declared in the namespace std. It takes only two non-default arguments,
the input stream and the string object to populate. Like its namesake,
it reads characters until it encounters the first occurrence of the delimiter ('\n'
by default) and consumes and discards the delimiter. The advantage of this
function is that it reads into a string object, so you don t need to
worry about buffer size.
Generally, when you re processing a text file that you read
a line at a time, you ll want to use one of the getline( )
functions.
Overloaded versions of get( )
The get( ) function also comes in three other
overloaded versions: one with no arguments that returns the next character
using an int return value; one that stuffs a character into its char
argument using a reference; and one that stores directly into the underlying
buffer structure of another iostream object. The latter is explored later in
the chapter.
Reading raw bytes
If you know exactly what you re dealing with and want to
move the bytes directly into a variable, an array, or a structure in memory,
you can use the unformatted I/O function read( ). The first argument for this function is a pointer to the destination memory, and the second is the number of bytes
to read. This is especially useful if you ve previously stored the information
to a file, for example, in binary form using the complementary write( )
member function for an output stream (using the same compiler, of course).
You ll see examples of all these functions later.
Thinking in C++ Vol 2 - Practical Programming |
Prev |
Home |
Next |