getline(cin,stringname)... Fehler

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • getline(cin,stringname)... Fehler

    Hi Leute,

    ich arbeite mit einem MacBook und Xcode.
    Ich habe einen Code geschrieben der Kundendaten in einer Datei speichern soll, die man auch wieder Aufrufen kann. Mein Problem ist, wenn ich cin zum Einlesen für z.B den Namen benutze, muss ich statt einem Leerzeichen (z.B. zwischen Nachmame und Vorname) ein Unterstrich " _ " benutzen. Deshalb habe ich dafür dann getline() benutzt. Anhand des Quelltextes und der Ausgabe in der Konsole, erkläre ich euch mein Problem.


    Quellcode

    1. #include <iostream>
    2. #include <ostream>
    3. #include <fstream>
    4. #include <string>
    5. using namespace std;
    6. const char* const dataB = "kundendaten.dat";
    7. char soa;
    8. string knr, name, strhn, plzort, tel, email;
    9. int main()
    10. {
    11. system("clear");
    12. cout << "\n {__Kunden Datenbank 0.1.1__}" << endl << endl;
    13. cout << "Kunden (A)nzeigen oder (S)peicher: ";
    14. cin >> soa;
    15. if ((soa == 'S') || (soa == 's'))
    16. { system("clear");
    17. cout << "\n >> Kundendaten Speichern <<" << endl << endl;
    18. cout << "\nKundennummer: "; getline(cin,knr);
    19. cout << "\nName : "; getline(cin,name);
    20. cout << "\nStraße HausNr. : "; getline(cin,strhn);
    21. cout << "\nPlz / Ort : "; getline(cin,plzort);
    22. cout << "\n\nTelefon : "; getline(cin,tel);
    23. cout << "\nE-Mail : "; getline(cin,email);
    24. cout << endl << endl;
    25. { ofstream outFile(dataB);
    26. if (!outFile)
    27. { cout << "\n\nFehler beim erstellen der Datei!\n\n"; exit(1); }
    28. outFile << knr << " " << name << " " << " " << strhn << " " << plzort << endl;
    29. outFile << tel << " " << email << " " << endl;
    30. }
    31. }
    32. if ((soa == 'A') || (soa == 'a'))
    33. { system("clear");
    34. ifstream inFile;
    35. inFile.open(dataB);
    36. if (!inFile)
    37. { cout << "\n\nFehler beim lesen der Datei!\n\n"; exit(2); }
    38. inFile >> knr >> name >> strhn >> plzort >> tel >> email;
    39. inFile.close();
    40. cout << "\n\n Kundendaten\n::----------------------::\n";
    41. cout << "\n\nKundennummer: " << knr;
    42. cout << "\n\nName : " << name;
    43. cout << "\nStraße HausNr. : " << strhn;
    44. cout << "\nPlz / Ort : " << plzort;
    45. cout << "\n\nTelefon : " << tel;
    46. cout << "\nE-Mail : " << email << endl << endl;
    47. }
    48. return(0);
    49. }
    Alles anzeigen


    Starte ich das Programm bin ich im Hauptmenü :


    {__Kunden Datenbank 0.1.1__}

    Kunden (A)nzeigen oder (S)peicher:



    Wenn ich jetzt den Punkt Speichern (also S oder s) auswähle kommt das:


    >> Kundendaten Speichern <<


    Kundennummer:
    Name :


    Man sieht ich kann schonmal die Kundennummer nicht eingeben, es wird einfach übersprungen.
    Geben ich jetzt trozdem mal den Namen ein, funktioniert schonmal der rest. Das sieht dann z.B. so aus:


    >> Kundendaten Speichern <<


    Kundennummer:
    Name : Mustermann Max

    Straße HausNr. : Musterstraße 01

    Plz / Ort : 0001 Musterstadt


    Telefon : 0001/111111

    E-Mail : max@mustermann.de


    logout

    [Prozess beendet]



    Beim Auslesen der Datei wird dann das angezeigt:



    Kundendaten
    ::----------------------::


    Kundennummer: Mustermann

    Name : Max
    Straße HausNr. : Musterstraße
    Plz / Ort : 01

    Telefon : 0001
    E-Mail : Musterstadt

    logout

    [Prozess beendet]

    Am besten ihr Compiliert mal diesen Code. Ihr müsst aber beachten, wenn ihr mit windows arbeitet, müsst ihr im befehl: system("clear"); das "clear" mit "cls" ersetzen. Insgesamt 3 mal im Quelltext.

    Nun meine Frage: Wieso funktioniert es nicht und was muss ich machen das es funktioniert?
  • Danke bcc-fan,

    das Eingeben läuft jetzt perfekt, nur gibt es jetzt ein anderes Problem :(
    wenn ich mir die Daten wieder anzeigen lasse steht es so da:

    Kundennummer: 01

    Name : Mustermann
    Straße HausNr. : Max
    Plz / Ort : Musterstraße

    Telefon : 01
    E-Mail : 00001


    Statt so:


    Kundennummer: 01

    Name : Mustermann Max

    Straße HausNr. : Musterstraße 01

    Plz / Ort : 00001 Musterstadt


    Telefon : 0001/111111

    E-Mail : max@mustermann.de


    Ich denke mal es ist entweder so, dass das Enter nach jeder Eingabe mit eingelesen wird oder im Bereich von Out.File (im Quelltext Zeile: 36 - 37) irgentwie was nicht stimmt.
    Keine Ahnung. Hab schon so viel ausprobiert. was meint ihr?
  • Habe gerade gemerkt das es immernoch an den Leerzeichen liegt die z.B zwischen dem Vor- und Nachnamen stehen. Ich muss immernoch ein Unterstrich oder ein anderes Trennzeichen benutzen. Dachte das ist bei getline anderst, als wenn ich nur cin benutze.. hat leider auch nicht geklappt.

    Wie mach ich das? Hier nochmal das Gesamtergebnis bis jetzt:

    Quellcode

    1. #include <iostream>
    2. #include <ostream>
    3. #include <fstream>
    4. #include <string>
    5. using namespace std;
    6. const char* const dataB = "database.dat";
    7. char soa;
    8. string knr, name, strhn, plzort, tel, email;
    9. int main()
    10. {
    11. system("clear");
    12. cout << "\n {__Kunden Datenbank 0.1.1__}" << endl << endl;
    13. cout << "Kunden (A)nzeigen oder (S)peicher: ";
    14. cin >> soa;
    15. if ((soa == 'S') || (soa == 's'))
    16. { system("clear");
    17. cin.clear();
    18. cin.ignore(cin.rdbuf() -> in_avail());
    19. cin.get();
    20. cout << "\n >> Kundendaten Speichern <<" << endl << endl;
    21. cout << "\nKundennummer: "; getline(cin,knr);
    22. cout << "\nName : "; getline(cin,name);
    23. cout << "\nStraße HausNr. : "; getline(cin,strhn);
    24. cout << "\nPlz / Ort : "; getline(cin,plzort);
    25. cout << "\n\nTelefon : "; getline(cin,tel);
    26. cout << "\nE-Mail : "; getline(cin,email);
    27. cout << endl << endl;
    28. { ofstream outFile(dataB);
    29. if (!outFile)
    30. { cout << "\n\nFehler beim erstellen der Datei!\n\n"; exit(1); }
    31. outFile << knr << " " << name << " " << strhn << " " << plzort << endl;
    32. outFile << tel << " " << email << " " << endl;
    33. }
    34. }
    35. if ((soa == 'A') || (soa == 'a'))
    36. { system("clear");
    37. ifstream inFile;
    38. inFile.open(dataB);
    39. if (!inFile)
    40. { cout << "\n\nFehler beim lesen der Datei!\n\n"; exit(2); }
    41. inFile >> knr >> name >> strhn >> plzort >> tel >> email;
    42. inFile.close();
    43. cout << "\n\n Kundendaten\n::----------------------::\n";
    44. cout << "\n\nKundennummer: " << knr;
    45. cout << "\n\nName : " << name;
    46. cout << "\nStraße HausNr. : " << strhn;
    47. cout << "\nPlz / Ort : " << plzort;
    48. cout << "\n\nTelefon : " << tel;
    49. cout << "\nE-Mail : " << email << endl << endl;
    50. }
    51. return(0);
    52. }
    Alles anzeigen