Kann mir jemand helfen? Bin Anfänger



  • ok, hab das jetz mal so gemacht wie du gesagt hast.
    Da bringt er mir aber eine Fehlermeldung und bricht sofort ab.
    Vorher konnt ich noch die werte eingeben.



  • FloWe schrieb:

    int main (void)
    {
    int a=0,b=0,c=0,d=0;
    
    cout << "Geben Sie die Seitenlängen des Feldes ein: \n";
    cin >> a >> b;
    c=a*b;
    cout << "Die Flaeche des Feldes beträgt " << c << "m²";
    
    getchar();
    }
    

    Allerdings schließt sich bei mir das Ausgabefenster sofort wieder. Müsste es nicht durch das getchar() auf eine beliebige Tastertureingabe warten?

    Also, lass uns das mal analysieren:

    1. getchar , will, wie es der Name schon sagt, ein Zeichen.
      2. Du gibst z.B. ein: 3-enter-5-enter.
      3. Im Puffer stehen nun 4 Zeichen. a bekommt die 3. Das erste enter wird ignoriert, da der operator>> standardgemäß führende Whitespaces ignoriert. b bekommt nun den Wert 5. Um das letzte enter kümmert sich aber niemand, es bleibt im Puffer stecken.
    2. getchar will ein Zeichen, und es bekommt das im Puffer steckende enter .

    Gut, nun wissen wir, wo das Problem liegt. Die Lösung ist, wie so oft: Was feststeckt muss entfernt werden. Heißt, wir reinigen den Puffer:

    cin.ignore(64,'\n'); // 64 habe ich nun beliebig gewählt. Du kannst auch jede andere Zahl wählen, natürlich min. 1.
    getchar();
    


  • Ahhhh, Danke 🙂
    find ich trotzdem etwas seltsam dass das zweite enter nicht auch dem zweiten wert zugeordnet wird. naja. wieder was gelernt 🙂

    Danke



  • FloWe schrieb:

    Ahhhh, Danke 🙂
    find ich trotzdem etwas seltsam dass das zweite enter nicht auch dem zweiten wert zugeordnet wird. naja. wieder was gelernt 🙂

    Hää, was hat Enter mit einer Ganzzahl am Hut?



  • ich muss ja mit Enter die eingabe des wertes bestätigen, oder nicht? Sonst bleibt ja das programm an der stelle stehen wo ich den wert für 'b' eingeben soll.



  • FloWe schrieb:

    ich muss ja mit Enter die eingabe des wertes bestätigen, oder nicht? Sonst bleibt ja das programm an der stelle stehen wo ich den wert für 'b' eingeben soll.

    Richtig.
    Aber wie mein Vorposter schon geschrieben hat, ignoriert operator>> das Whitespace \n. Da du aber beim Einlesen von b Enter drückst, bleibt dies im puffer hängen, da kein operator>> mehr folgt.

    gruß
    syntax



  • FloWe schrieb:

    ich muss ja mit Enter die eingabe des wertes bestätigen, oder nicht? Sonst bleibt ja das programm an der stelle stehen wo ich den wert für 'b' eingeben soll.

    Jain. Du musst dir das so vorstellen. Alles was du mit cin einließt, landet in einem Stream. Ein Stream ist eine Aneinanderreihung von Zeichen. Nun gibt es Funktionen, mit denen du Zeichen aus dem Stream rausziehen kannst.

    operator>>
    cin.get();
    getchar();
    

    Diese Funktionen sind immer dann zufrienden, wenn sie ein Zeichen aus dem Stream bekommen. Ob nun du ein Zeichen eingibst oder ob bereits eines vorhanden ist, interessiert nicht. Alle Zeichen die du eingibst, haben erstmal nichts miteinander zu tun und sind unabhängig voneinander. Was zusammen gehört entscheidet dann der Datentyp, den du haben willst. Du willst eine Ganzzahl, du bekommst eine Ganzzahl. Enter hat mit einer Gnazzahl nichts am Hut. Enter ist ein normales Zeichen.



  • ahhja, gut zu wissen

    eine frage hätte sich da gerade noch aufgetan.
    bei dem "cin.ignore(64,'\n');", was bewirkt der wert? gzw warum beötige ich zum ignorieren überhaupt einen wert?



  • FloWe schrieb:

    eine frage hätte sich da gerade noch aufgetan.
    bei dem "cin.ignore(64,'\n');", was bewirkt der wert? gzw warum beötige ich zum ignorieren überhaupt einen wert?

    http://www.c-plusplus.net/forum/p2218954?highlight=ignorieren#2218954




Anmelden zum Antworten