nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

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++
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