getline



  • @Mr.Blond:
    is schon ok, ich bin ja auch noch nich so gut 😉
    @dgrat:
    for is nich so gut, ich weiß ja noch nicht wie oft die schleife durchlaufen muss
    @lmk-flash:
    ja, bloß ich verstehe halt nicht, warum das getline beim ersten Durchlauf übersprungen wird und das Programm erst beim zweiten mal auf eine Eingabe wartet. 😕



  • muss das mit getline sein sonst nim doch einfach

    cin>>user;
    

    also dann

    #include <iostream>
    #include <string>
    using namespace std;
    void main()
    {
    string user;
    do
    {
    cout << "Gewuenschten Nutzernamen eingeben: ";
    cin>>user;
    }
    while(user.length()==0);
    }



  • ich denke, es sind noch restzeichen von vorher im buffer.
    rausholen, vorher sowas oder ähnliches schreiben.

    cin.clear();
    	cin.ignore(10000, '\n');
    

    (unvollkommen 😉 )

    zum zweiten: das visual studio 6 hat ungepatcht das doofe doppeldrückproblem bei getline, der patch ist bei hume sikkins auf der seite zu finden (war er zumindest früher 😉 )

    <off>
    an einige aus diesem thread: im jahre 2005 sollte void main und iostream.h aus den köpfen entfleucht sein, da die neuen compiler zumindest bei zweiterem nicht mehr reagieren 😉 </off>



  • Also mit cin funktioniert es sogar ordnungsgemäß und ich brauch auch nichtmal die Schleife, weil man nun erst weitermachen kann, nachdem man was eingegeben hat. Aber cin liest halt nur bis zum ersten Leerzeichen ein.
    Theoretisch ist das jetzt auch egal, da ich mit dem Programm eh nur was testen wollte, aber es würde mich schon mal interessieren, wie es zu diesem Fehlverhalten kommt.



  • hast du vorher eine eingabe? mit cin? vor der schleife?

    wenn ja, hilft der von mir beschriebene weg.



  • Also um den Puffer zu leeren:

    cin.sync();  // Puffer leeren
    cin.clear(); // Fehlerflags entfernen, falls gesetzt
    

    Damit sollte der Puffer vollkommen leer sein.



  • elise schrieb:

    an einige aus diesem thread: im jahre 2005 sollte void main und iostream.h aus den köpfen entfleucht sein, da die neuen compiler zumindest bei zweiterem nicht mehr reagieren 😉

    ja das stimmt, aber void main() müssen wir immer noch in der Schule nutzen wurde uns so vom Lehrer so gesagt wir müssen auch noch mit diesem scheiß altem Borland Compiler nutzen der noch auf Dos-Basis basiert. ich mag diesen dos scheiße nicht deswegen schreib ich die programme auch heufig mit dem editor und lass die dann von Borland laden.

    lmk-flash



  • Andreas2 schrieb:

    Also um den Puffer zu leeren:

    cin.sync();  // Puffer leeren
    cin.clear(); // Fehlerflags entfernen, falls gesetzt
    

    Damit sollte der Puffer vollkommen leer sein.

    nein.
    im visual studio bitte eher meine version nehmen.

    ps: siehe 4 threads weiter vorne



  • ja das stimmt, aber void main() müssen wir immer noch in der Schule nutzen wurde uns so vom Lehrer so gesagt wir müssen auch noch mit diesem scheiß altem Borland Compiler nutzen der noch auf Dos-Basis basiert. ich mag diesen dos scheiße nicht deswegen schreib ich die programme auch heufig mit dem editor und lass die dann von Borland laden.

    lmk-flash

    ich mag "alte" compiler. aber eurem alten lehrer könnt ihr mal neue sachen beibringen 😉
    cu



  • Also ich programmiere ja auch noch im "alten Stiel", ohne visual studio und so...
    Aber der Tip von Andreas2 hilft trotzdem nicht weiter 😞



  • welchen compiler nutzt du den jetzt gerade also für das programm? ich nutze eigentlich ganz gerne den Dev-C++ Compiler der ist auch umsonst sonst für windows programme borland.

    lmk-flash



  • Ich nutze "freecommandLinetools-Borland C++ Compiler 5.5"
    wurde mir irgendwann mal als kostenloser Einsteigercompiler empfohlen



  • leidernochanfänger schrieb:

    Also ich programmiere ja auch noch im "alten Stiel", ohne visual studio und so...
    Aber der Tip von Andreas2 hilft trotzdem nicht weiter 😞

    *ich geb auf*.. den anderen tip auch probiert?

    egal, dann leb mit deinem fehler.



  • aber void main() müssen wir immer noch in der Schule nutzen wurde uns so vom Lehrer so gesagt

    Machst du ne Ausbildung oder bist du noch in einer normalen Schule?



  • @elise:
    "ok,ok" ich hab deinen Tip ja probiert und der konnte das Problem auch vollständig beheben. 🙂
    Aber ganz verstanden, was das Problem war, hab ich noch nicht.



  • bei arbeit mit strömen kannst du dir vorstellen, dass restzeichen im buffer verbleiben.
    zum beispiel der wagenrücklauf. kommst du in solch eine bredouille, musst du selber hand anlegen und den streambuffer leeren.



  • aber void main() müssen wir immer noch in der Schule nutzen wurde uns so vom Lehrer so gesagt

    öhh.. da würde ich eurem Lehrer mal freunddlicherweise darauf aufmerksam machen das es totaler Quatsch ist was er euch da beibringt, denn laut ANSI-Standard gibt es KEIN 'void main()'

    Die einzig richtigen Definitionen sind:

    int main() oder int main(int argc, char* argv[])

    was anderes ist eigentlich gar nicht erlaubt, es wird nur von den meisten compilern deshalb unterstützt, weil sich dieser Mist bei vielen eingebürgert hat.

    Sagt eurem Lehrer, er soll sich die richtigen Bücher kaufen, wo dieser Quatsch nicht drinnesteht: 'void main()'

    Wenn er schon unterrichtet sollte er sich bitte auch an den Standard halten!!!
    (Sorry für meine Offenheit, aber wenn ich höre das einem so etwas beigebracht wird, platzt mir der Kragen)



  • Aha 🙄 ; naja da ich zu Zeit eh nur so zum Spaß programmiere, ich geh ja auch noch zur Schule, mach ich mir eigentlich über Sachen wie den Streambuffer noch nicht so viele Gedanken.
    @Searence:
    zu viel kann man von den Info-Lehrern auch nicht verlangen, bei uns hat zum Beispiel keiner beim Studium irgend was damit zu tun gehabt, die ham alle nur irgendwelche Schnellkurse gemacht.



  • Vielleicht habe ich auch etwas übereagiert, aber meine Meinung ist das man jemanden lieber etwas gleich richtig beibringen soll als 10 mal falsch.

    Dann kann man es auch gleich sein lassen.

    Wie auch immer, hoffe dein Problem ist gelöst 🙂


Anmelden zum Antworten