Stream aus Datei oder stdin
Von: Holger Jorra (spamtrap54321@gmx.net) [Profil]
Datum: 02.05.2008 23:51
Message-ID: <481b8cb6$0$6511$9b4e6d93@newsspool4.arcor-online.net>
Newsgroup: de.comp.lang.iso-c++
Datum: 02.05.2008 23:51
Message-ID: <481b8cb6$0$6511$9b4e6d93@newsspool4.arcor-online.net>
Newsgroup: de.comp.lang.iso-c++
Hallo allerseits,
ich versuche mich gerade daran, ein Programm zeilenweise entweder von
der Standardeingabe oder aus einer Datei lesen zu lassen. Die Strings
sollen später noch bearbeitet werden, daher würde ich das
gern über
die gleiche Funktion steuern und dieser Abstrakt die Quelle zuweisen.
cin.getline funktioniert zwar selbst einwandfrei und das Beispiel
unten auch für die Datei, allerdings _so_ nicht für stdin.
Scheinbar
wird stdin durch ifstream bereits geöffnet (obwohl es das nicht
sollte?!) und es kommt am Ende nur noch EOF bei der Funktion an. Ich
würde gern besser verstehen, wo bei mir der Denkfehler liegt. Das
Programm kompiliert zwar ohne jede Warnung, funktioniert aber eben
nicht so wie gewünscht.
Hoffe mir kann dabei jemand helfen.
Gruß Holger
//##########################################
#include <iostream>
#include <fstream>
using namespace std;
void lineOutput( ifstream& stream );
int main( int argc, char **argv ) {
char *program_name;
program_name = argv[0];
if (argc < 2){
ifstream cin;
lineOutput ( cin );
}
else {
cout << argv[1];
ifstream f1(argv[1]);
if( f1.is_open() != true ) {
cerr << program_name << ":Could not open file " << argv[1]
<< endl;
}
lineOutput( f1 );
f1.close();
}
return 0;
}
void lineOutput ( ifstream& stream ) {
char buffer[512];
int cnt=1;
while( stream.getline( buffer, sizeof(buffer)) ) {
if( stream.fail() ) {
cerr << "Reading Error" << endl;
break;
}
cout << cnt++ << " : " << buffer << endl;
}
cout << endl;
}
//###########################################
--
Den Stil verbessern, das heißt den Gedanken verbessern.
--Friedrich Nietzsche
[ Auf dieses Posting antworten ]Antworten
- Markus Schaaf (04.05.2008 17:31)
- Holger Jorra (06.05.2008 11:18)
- Thomas Maeder (07.05.2008 08:04)
- Markus Schaaf (07.05.2008 20:59)
- Thomas Maeder (04.05.2008 18:05)
