murison@cfa.HARVARD.EDU (Marc A. Murison, RG) (05/06/91)
/*
* iotest.cpp
*
* Why don't getline() and get() work in this program?
* getline() is supposed to read a line of text, including the
* termination character (newline by default). It doesn't
* include the termination character. Meanwhile, get() seems to
* stop working after reading only one line.
*
* Compiler = Borland C++ 2.0
*
* Input is any normal ascii text file, specified on command line.
*
* Any info would be appreciated!
*
* Marc Murison murison@cfacx2.harvard.edu
* pepmmu@cfaamp.harvard.edu
*
*/
#include <fstream.h>
#include <conio.h> //for kbhit()
const int SIZE = 257;
int setup( int argc, char **argv, fstream &in, fstream &out );
int main( int argc, char *argv[] )
{
fstream in, out;
if( !setup( argc, argv, in, out ) ) return 1;
char buff[SIZE];
while( in && out ) {
// When this statement is executed, the newline is
// not appended to the buffer:
in.getline( buff, SIZE, '\n' );
// Here, nothing happens after the 1st line is
// read -- the buffer gets a NULL as first byte,
// causing an infinite loop (thus the need for
// kbhit()).
// in.get( buff, SIZE, '\n' );
// if( kbhit() ) break;
out << buff;
}
in.close();
out.close();
return 0;
}
int setup( int argc, char **argv, fstream &in, fstream &out )
{
if( argc != 3 ) {
cerr << "\nUse: iotest infile outfile\n";
return 0;
}
in.open( argv[1], ios::in );
if( !in ) {
cerr << "\a\nUnable to open " << argv[1] << " for input!\n";
return 0;
}
out.open( argv[2], ios::out );
if( !out ) {
cerr << "\a\nUnable to open " << argv[2] << " for output!\n";
return 0;
}
return 1;
}