leerzeichen eingeben



  • Wie kann ich mit cin auch Leerzeichen in eine String Variable schreiben.
    Der gibt ja alles was nach einem Leerzeichen kommt in die Variable bei der nächsten cin eingabe.



  • Das Forum hat ne Suchfunktion, da hättste zB. 'leerzeichen' eingeben können.

    nimm getline



  • getline funktioniert nur bei char, nicht bei string.



  • nicht istream::getline, sondern std::getline:

    getline (cin, your_string, optional_delimiter);
    


  • hm, ich habe bei mir die Eingabe statt durch cin >> mit getline erfolgen lassen, nun muss ich aber immer zweimal Return drücken, damit er sie annimmt?



  • Zeig mal den Code bitte.



  • Die Kristallkugel vermutet, du hast den MSVC version 6? Sie meint, du solltest dann mal den STLFix ausprobieren.



  • Hat sich schon erledigt, warn Fehler von mir.

    Aber trotzdem funzt es nicht, wenn ich cin << string; gegen getline(cin, string); austausche. Das Programm stürzt dann ab mit nem Fehler in fopen.c...



  • dann zeig mal den code
    (ps du meinst sicher cin >> string)



  • Ja ich meine cin >> string; 🙂

    Also der ganze Code ist etwas umfangreich, hier ist der problematische Teil:

    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    
    int main()
    {
     ifstream quelle;
     string dateiname;
    
     cin >> dateiname;
    
     quelle.open(dateiname.c_str(), ios_base::in);
    
     return 0;
    }
    

    ^^ geht aber nicht mit leerzeichen im Pfad

    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    
    int main()
    {
     ifstream quelle;
     string dateiname;
    
     getline(cin, dateiname);
    
     quelle.open(dateiname.c_str(), ios_base::in);
    
     return 0;
    }
    

    ^^ schmiert ab

    Ich benutze MSVC++ 6.



  • kompilier mal folgendes minimalbeispiel und probier's aus:

    #include <fstream>
    #include <string>
    using namespace std;
    
    int main () {
       string filename;
       cin >> filename;
       {
          ifstream in (filename.c_str());
       }
       {
          ifstream in ("C:\\eine datei mit leerzeichen.blabla");
       }
       getline(cin,filename);
       {
          ifstream in (filename.c_str());
       }
    }
    

    schmiert das ab? wo?



  • Das sieht gut aus, das werd ich gleich mal ausprobieren.

    Hmnö, das schmiert nicht ab. Dann muss ich wohl nochmal jede Zeile durchgehen bei mir. Danke für die Hilfe erstmal!

    edit: Ist ja schon etwas anders... :

    ...
             ifstream quelle;
             string dateiname;
    ...
    
    			cout << "[O] Enter Filename: ";
    			getline(cin,dateiname);
    			cout << endl;
    
    			quelle.open(dateiname.c_str(), ios_base::in);
    			while(!quelle)
    			{
    				quelle.clear();
    				cout << "[X] Error: Unable to open file " << dateiname << "!" << endl;
    				cout << "[O] Enter correct Filename (no spaces! 0 to exit): ";
    				getline(cin, dateiname);
    				cout << endl;
    				if(dateiname == "0")
    				{
    					cout << endl << "Thank your for using our software!" << endl;
    				}
    				quelle.open(dateiname.c_str(), ios_base::in);
    			}
    

    so siehts bei mir aus...sollte ich es vielleicht mit

    quelle in (dateiname.c_str());
    

    versuchen? Das sieht aber komisch aus... 😕



  • wenn dann mit

    ifstream quelle(dateiname.c_str());
    

    das ios_base::in kannst du dir bei ifstreams aber sowieso sparen.

    hast du dir den stlfix runtergeladen, zu dem ich ein paar beiträge weiter oben einen link gepostet hab?

    in der schleife scheinst du prüfen zu wollen, ob die datei korrekt geöffnet wurde. nimm dazu die funktion is_open!



  • Ich komme ganz gut zurecht mit MSVC++ 6. Was genau hat der STLFix für Vorteile?

    Ist mein Beispiel oben denn soweit korrekt? Wie gesagt, mit cin >> dateiname; funktioniert es...würde mich echt interessieren, warum nicht mit getline(cin, dateiname);

    Ich verwende die !quelle Bedingung um zu prüfen ob die Datei geöffnet ist. Habe dieses Vorgehen aus M+T easy c++ von Dirk Louis. Hat das Nachteile?

    Die Schleife dient einfach dazu, den Benutzer solange nach dem korrekten Dateinamen bis er 0 eingibt oder sich nicht mehr vertippt...



  • in der STL version, die der MSVC6 standardmäßig dabei hat, sind einige fehler enthalten, und sie ist nicht besonders gut optimiert.

    ! prüft dens stream auf fail() und das kann auch andere bedeutungen haben.



  • Ach jetzt versteh ich das mit dem STLfix, dachte das wärn Compiler... *schnellmerker. Ich zieh ihn mir gleich, für heute hör ich auf, mache morgen weiter...

    Aber wenn der Stream fail() ist gibt es doch auf jeden Fall Probleme mit dem Lesen aus der Datei, oder?



  • ja, aber bei fail kann im gegensatz zu bad der stream noch gerettet werden



  • Ds ist gut zu wissen, aber dann bleibe ich in diesem Fall bei der Methode. Bei dem Programm geht es ausschliesslich darum, eine Textdatei einzulesen, auszuwerten und das Ergebnis in eine neue zu schreiben...



  • also bei mir funktionier dein schnipsel auf jedenfall



  • Ok, dann werd ich mir einfach mal den Fix installieren morgen. Ich berichte dann, obs geht.

    Vielen Dank für die ausführliche Hilfe! 🙂 👍


Anmelden zum Antworten