Problem mit getline



  • Hi.
    Bin auf der suche nach einer Lösung für mein Problem bei euch glandet.
    Vileicht könnt ihr mir ja helfen.
    Zur Zeit versuche ich mich im umgang mit Dateien. Hab mir auch ein kleines Tool geschrieben um das ganze zu testen. Hier mal der Code.

    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    
    int main(void)
    {
    char datei_name[20] = "Ausgabe.txt";
    string text;
    int wahl;
    
    ofstream ausgabe(datei_name,ios::app);
    	if (!ausgabe)
    	{
    		cout << "Fehler beim öffnen der Datei " << datei_name << endl;
    		return 1;
    	}
    
    ifstream eingabe(datei_name);
    	if (!eingabe)
    	{
    		cout << "Fehler beim lesen der Datei " << datei_name << endl;
    		return 1;
    	}
    
    cout << "DTT - Datei Test Tool V1"<< endl;
    cout << "Treffen Sie ihre Wahl." << endl;
    cout << endl;
    cout << "(1) Schreibe in Datei" << endl;
    cout << "(2) Lese aus Datei" << endl;
    cin >> wahl;
    switch(wahl)
    {
    	case 1:		cout << "In Datei schreiben" << endl;
    			cout << "Geben Sie den ihren Text ein." << endl;
    			getline(cin,text);
    			cout << text;
    			break;
    
    	case 2:		cout << "Aus Datei lesen" << endl;
    
    			getline(eingabe,text);
    			cout << text << endl;
    			break;
    }
    
    return 0;
    }
    

    Mein Problem dabei ist jetzt das er bei case 1 getline immer übergeht. an der stelle von "cout << text" schreibe ich normal in die Datei. Hab das nur zum testen von getline geändert. Hab mir auch ein kleines Programm geschrieben nur mit getline also mit getline ne zeile in einen string laden, da funktioniert es.
    Nur hier nicht.



  • Primex schrieb:

    Mein Problem dabei ist jetzt das er bei case 1 getline immer übergeht.

    vorher liest du einen int ein. das geht so:
    du tippst "123\n" und der rechner liest "123" und liest dann "\n" und bem3rkt, daß der int zu ende ist ind stopft das "\n" wieder zurück in den stream. der nächste, der einen int liest, liest zuersat alle "\n" weg und dann normal die ziffern bis zum nächsten "\n" (um genau zu sein bis zum nächsten whitespace).

    deswegen ist bei deinem getline ein "\n" im cin und das wird fein gelesen und macht dir alles kaputt.

    einfache hilfe wäre cin.get() vor dieses getline zu schreiben.



  • Danke jetzt funktioniert es. aber gibts da nicht ne sauberere Lösung. Z.B. den Stream nach dem cin zu leeren?



  • Primex schrieb:

    Danke jetzt funktioniert es. aber gibts da nicht ne sauberere Lösung. Z.B. den Stream nach dem cin zu leeren?

    leeren ist viel unsauberer. stell dir vor, ich habe wiedermal voll schnell getippt, und weil icg dein programm ift verwende, auch ohne hinzugucken. und zufällig war der rechner heute lahm und ich hab schon drei zeilen mehr getippt, als er verarbeiten konnte. macht ja nix, er holt es in sekundenschnelle nach. aber wehe! mittendrin löscht er den eingabepuffer und haut doch in der tat wichtige sachen weg!

    korrekt wäre es, in einer schleife alle whitspaces wegzulesen, und zu fordern, daß die nutzdaten deiner zeile nicht mit nem whitspace beginnen.


Anmelden zum Antworten