problem mit cin und leerzeichen



  • hallo
    ich habe eine einfache DAO frage:

    ich habe das problem, egal was ich fuer eine zeichenkette ueber cin eingebe, kommt man bei der ausgabe cout << nachricht << endl; nur bis zum leerzeichen.
    der rest faellt irgendwie weg.

    1. meine frage warum und was muss ich aendern
    2. frage ist zu cout, wieso stehen bei den meisten programmen an der cout anweisung das "endl"
    was ist das?

    dank im vorraus

    os windows xp
    compiler bcc 5.5.1
    quelltext:

    #include <iostream.h>
    #include <windows.h>

    int main(){
    char nachricht[250];

    cout << "Geben Sie die Nachricht ein ";
    cin >> nachricht;
    cout << nachricht << endl;
    return 0;
    }



  • #include <iostream.h>
    
    int main(){
    char nachricht[250];
    cout << "Geben Sie die Nachricht ein ";
    cin.getline(nachricht,250);
    cout << nachricht << endl;
    return 0;
    }
    


  • 1. meine frage warum und was muss ich aendern

    cin >> var liest nur bis zum ersten Whitespace.
    Was du brauchst ist:
    cin.getline(nachricht, 250);

    2. frage ist zu cout, wieso stehen bei den meisten programmen an der cout anweisung das "endl"
    was ist das?

    cout << "Bla" << endl;
    ist äquivalent zu
    cout << "Bla" << "\n" << flush;
    und das wiederrum
    zu:
    cout << "Bla" << "\n";
    cout.flush();

    Es wird also ein Zeilenumbruch in den Stream eingefügt und selbiger danach geflushed.



  • Da häng ich mal ne frage mit an:

    1. erwartet cin.get() genau xxx zeichen, oder werden die restlichen (falls weniger eingegeben wurden als im Methodenaufruf stehen) aufgefüllt? weggelassen?

    2. wozu ist das cout.flush() wichtig? bei mir hats bisweilen auch ohne geklappt, scheint ja aber nich so ganz das gelbe vom Ei zu sein *g*



    1. weggelassen
      du sagst: hau maximal 250 zeichen rein.
      wenn es jetzt aber nur 230 zeichen gibt, dann haut er 230 zeichen rein und laesst die restlichen 20 plaetze unberuehrt.
      sind aber 270 zeichen da, haut er alle 250 zeichen voll und laesst die restlichen 20 im puffer stehen.

    das flush ist unnoetig und uU sogar eine performance bremse (wenn man naemlich einen gepufferten stream flusht, ist das nicht so gut - denn schliesslich sind puffer dazu da zu puffern - da sollte man sie nicht dauernd flushen ;))



  • 1.1 gibt es dann noch ne möglichkeit an den rest des streams ranzukommen?
    1.2 frage ich jetzt nochmal zeichen ab, werden diese restlichen dann davbor gesetzt (weil noch im puffer)?
    falls 1.2 == true sollte ich also am besten nach jeder abfrage flushen, damit ich keinen rest behalte, der mir später die 2. Abfrage vermüllt ?!

    2. k 🙂



  • THE_FreaK schrieb:

    1.1 gibt es dann noch ne möglichkeit an den rest des streams ranzukommen?

    zB nochmal getline() aufrufen

    1.2 frage ich jetzt nochmal zeichen ab, werden diese restlichen dann davbor gesetzt (weil noch im puffer)?

    jep

    falls 1.2 == true sollte ich also am besten nach jeder abfrage flushen, damit ich keinen rest behalte, der mir später die 2. Abfrage vermüllt ?!

    statt flushen waere es wohl besser alle daten einzulesen 😉

    aber: restdaten sollten nicht im stream bleiben - also entweder alles lesen oder den muell flushen



  • hallo

    super hat mir weitergeholfen, thx an alle von euch


Anmelden zum Antworten