Sätze einlesen



  • ok ich muss es für doofe wissen.
    was muss ich an 3. Stelle in die getline() schreiben damit ich die Länge des einzulesenden Satzes steuern kann?
    Schreibe ich 'n' bricht er beim ersten geschriebenen n logischerweise ab, schreibe ich '\n' dann kann ich gar nichts mehr eingeben, und schreibe ich eine zahl kommt eine fehlermeldung im Compiler.
    Ich habe es schon richtig verstanden das an der Stelle wo ich das 'n' geschrieben habe die Zeichenanzahl geschrieben wird?



  • also ist laut dem was ich gelesen habe folgender Code korrekt:

    char array[256];
    cout << " Was soll in die erste Zeile der Datei geschrieben werden? :" << endl;
    cin.getline(array,256);
    auslesen << array;

    ?


  • Mod

    Das liest bis zu 255 Zeichen ein oder bis die Zeile zuende ist.

    Darf ich übrigens mal so neugierig sein, warum du überhaupt die Zeilenlänge begrenzen willst?



  • leider macht es genau das nicht.

    hab es jetzt viel einfacher versucht:
    #include <iostream>
    #include <cstdlib>
    #include <fstream>
    #include <string>

    using namespace std;

    void main ()
    {
    ofstream ausgabe;

    string dateiname;

    //einlesen des Dateinamens
    cout << " Dateiname: ";
    cin >> dateiname;
    cout << endl;

    ausgabe.open(dateiname.c_str(), ios_base::out);

    //Daten in die Datei schreiben
    string text1;
    getline(cin, text1);
    ausgabe << text1;
    cout << text1 << endl;

    //ausgabe.close();

    }

    wenn ich das kompiliere dann kann ich nur einen Dateinamen eingeben und sonst nichts und das kann ja nicht sein weil ich in der getline Funktion nicht angegeben habe wann schluss sein soll.

    Ich möchte einfach nur eine Zeile einlesen und wenn ich die mit Enter bestätige dann soll Sie gespeichert werden.

    🙂



  • Das beantwortet aber nicht warum du die Länge begrenzen möchtest.
    Simon



  • möchte einfach nur eine Zeile einlesen und das versuch ich halt auf verschiedenen Wegen.


  • Mod

    morisq schrieb:

    möchte einfach nur eine Zeile einlesen und das versuch ich halt auf verschiedenen Wegen.

    😕 Du hattest doch schon eine super Lösung mit getline und String. Das jetzt mit dem anderen getline und char-Arrays zu versuchen ist doch nur unnötiges Gefrickel. Jeder C++-Programmierer würde string nehmen, solange ihn nicht irgendein anderer Umstand zu Arrays zwingt.



  • #include <iostream>
    #include <cstdlib>
    #include <fstream>
    #include <string>

    using namespace std;

    void main ()
    {
    ofstream ausgabe;

    string dateiname;

    //einlesen des Dateinamens
    cout << " Dateiname: ";
    cin >> dateiname;
    cout << endl;

    ausgabe.open(dateiname.c_str(), ios_base::out);

    //Daten in die Datei schreiben
    string text1;

    cout << " Text der gespeichert werden soll: " << endl ;
    getline(cin, text1);
    ausgabe << text1;
    cout << text1 << endl;

    }

    ok dann möchte ich letzten Endes nur noch wissen warum ich hier bei dem Code keinen Text eingeben kann sondern die Konsolenanwendung direkt nach Eingabe eines Dateinamens wieder geschlossen wird??
    Und wie eine Lösung für dieses Problem genau aussieht.

    Ich nutze Visual 2008


  • Administrator

    Könntest du bitte mal CPP Tags verwenden?

    Und wenn ich mal raten darf. Der Dateiname enthält ein Leerzeichen? 🙂

    Grüssli



  • nein er enthält kein leerzeichen und was Cpp tags sind weiß ich nicht.

    Wenn ich das Programm mit Visual c++ 6.0 ausführe klappt alles
    aber mit Visual Studio 2008 nicht und das kann ja net sein. 🙂
    Muss man bei VS 2008 etwas anders machen??


  • Administrator

    Cpp-Tags (findet man gleich unterhalb der Smilies):

    #include <iostream> 
    //#include <cstdlib> brauchst du nicht
    #include <fstream> 
    #include <string> 
    
    using namespace std; 
    
    int main ()  // void main() gibt es nicht.
    { 
      ofstream ausgabe; 
    
      string dateiname; 
    
      //einlesen des Dateinamens 
      cout << " Dateiname: "; 
      cin >> dateiname; 
      cout << endl; 
    
      ausgabe.open(dateiname.c_str(), ios_base::out); 
    
      //Daten in die Datei schreiben 
      string text1; 
    
      cout << " Text der gespeichert werden soll: " << endl ; 
      getline(cin, text1); 
      ausgabe << text1; 
      cout << text1 << endl; 
    
    }
    

    Problem liegt bei der Eingabe des Dateinames. Wenn man Enter drückt, wird in den Stream ein \r\n reingeschrieben. Das wird aber nicht ausgelesen, sondern nur der Dateiname davor. Danach sagst du, dass du eine Linie einlesen möchtest. Es liest somit bist zum nächsten \r\n , also genau 0 Zeichen 🙂

    Lies den Dateinamen auch gleich mit getline ein und das Problem ist weg. Und VS 6.0 solltest du in die Mülltonne schmeissen.

    Grüssli



  • jetzt klappt es! 🙂

    vielen Dank an alle

    #include <iostream>
    #include <cstdlib> 
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    void main ()
    {
        ofstream ausgabe;
    
        string dateiname,text1;
    
        //einlesen des Dateinamens
        cout << " Dateiname: ";
        getline(cin, dateiname);
    
        ausgabe.open(dateiname.c_str(), ios_base::out);
    
        //Daten in die Datei schreiben
    
        cout << " Text der gespeichert werden soll: " << endl ;
        getline(cin, text1);
        ausgabe << text1;
    	cout << " der gespeicherte Text ist: " << endl << endl;
    	cout << text1 << endl;
    	system("pause");
    
    }
    

    void damit man keinen Wert zurückliefern muss, für int muss über return .. eine integer Variable rückgeliefert werden sonst motzt der Compiler.
    Und cstdlib.h wegen system("pause").

    Jap ich arbeite nur noch mit VS 2008.


Anmelden zum Antworten