Buchstabe in Dezimalzahlwert Fehler
-
cin.clear() löscht keine Variablen, es setzt lediglich den Fehlerzustand des Streams zurück.
-
Achso

Danke

Aber hat jemand noch einen Rat zu meinem Problem von weiter oben?
-
#include <limits> #include <iostream> using namespace std; int main() { cout<<"Geben Sie die X Koordinate des ERSTEN Punktes der ERSTEN Geraden ein: "; // cin >> X11; while( !(cin >> X11) ) { cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); // hier ein 2ter Parameter cout<<"Bitte wiederholen Sie Ihre Eingabe!"<<endl; cout<<""<<endl; } cin.get(); }cin.clearlöscht keine Variablen, es setzt den Fehlerzustand des Streamobjekts (in diesem Fallcinzurück).Warum hinter jede Abfrage schreiben?
Ich bin mir jetzt nicht 100% sicher, aber daswhile ( !( cin >> x11 ) )ist das selbe wie das
cin >> x11; while ( cin.fail() )und ersteres ist kürzer und ich weiß sofort was der Programmierer will.
PS: Falls das nicht stimmt, bitte korrigieren

-
Ja, stimmt nicht ganz.
Bei deiner Version wird die Schleife solange ausgeführt, solange !cin.fail() true ist. Die Einlese Operation findet nur einmal statt!
Richtig wäre:while (!(cin >> somewhat, cin.fail())) { }Auf das Ergebnis von cin >> somewaht, cin.fail() also für cin.fail() wird ! angewandt, was in der Bedingung der Schleife dann ausgewertet wird.
Bei der nächsten Iteration, wird cin >> somewaht wieder ausgeführt.
-
Achja, das hab ich übersehen. Danke Nathan

-
Jetzt sieht meins so aus, funktioniert aber so wie ganz am Anfang ohne die Schleife:
cout<<"Geben Sie die X Koordinate des ERSTEN Punktes der ERSTEN Geraden ein: "; while (!(cin>>X11, cin.fail())) { cin.clear(); cin.ignore(numeric_limits<streamsize>::max()); cout<<""<<endl; cout<<"Bitte wiederholen Sie Ihre Eingabe:"<<endl; cout<<"Geben Sie die X Koordinate des ERSTEN Punktes der ERSTEN Geraden ein: "; }Funktioniert sogar noch weniger, bei Zahlen bricht es ab.
-
cout<<"Geben Sie die X Koordinate des ERSTEN Punktes der ERSTEN Geraden ein: "; while( !(cin >> X11) ) { cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); // hier ein 2ter Parameter cout<<"Bitte wiederholen Sie Ihre Eingabe!"<<endl; cout<<""<<endl;
-
Danke, danke, danke

Es funktioniert jetzt einwandfrei!!
Danke an euch 3
-
Hier ist jetzt der fertige Code:
-
Furchtbar.
- viel zu viel Code für diese triviale Aufgabenstellung
- goto ist Anfängermüll
- Note 6 setzen
-
Dann schreib doch nen kürzeren Code, der auch gegen jede möglichen Fehleingaben geschützt ist und als Ausgabe auch nur Dezimalzahlen und keine Fehler ausgibt.
Außerdem bin ich ja auch Anfänger.
-
Da hast du hier was falsch verstanden.
Ich schreibe dir hier nicht deine Hausaufgaben.
Du ignorierst die hier gegebenen Hinweise, aber genau dafür ist dieses Forum ja auch gedacht: Hinweise auf konkrete Fragen zu geben.
Das ignorierst du und bist deshalb ein Noob.
Naiv auch dein anfängerhafter Glaube:
Es funktioniert jetzt einwandfrei!!
mit dem du implizierst, dass der Code korrekt ist. Ist er nicht.
Und standardkonform schon gar nicht.
Und float-Gleichheitsabfragen sind auch Schrott.
Und ...
-
Wutz macht hier eigentlich gar nichts außer blöd rumzuflamen. Ignorier ihn. Selbst wenn der code nicht unbedingt "optimal" ist.
-
Du sollst mir auch nicht deine Hausaufgaben schreiben. Die hab ich ja schon.
Außerdem brauchst du auch nicht auf Threads zu antworten nur um irgendwelche Leute zu beleidigen.
Du kannst gerne Kritik äußern, aber dann lass bitte nächstes mal Bemerkungen wie "Note 6 setzen" oder "bist deshalb ein Noob" weg.
-
Schon wieder falsch verstanden.
Ich lasse mir von dir nichts vorschreiben.
Wenn dein Lehrer halbwegs Ahnung hat, wird er dir evtl. eine 5 geben.
-
@TE, Zagatho:
Mein Beispiel konnte gar nicht funktionieren, das ! muss natürlich weg...
Mein Fehler. Aber im Ansatz wäre das die Alternative, die Zagatho meinte.
Sie ist aber nicht zur Nachahmung geeignet, weil das schon ein bisschen unleserlicher ist, als die ursprüngliche Version.
-
Zutz:
Konstruktiv? Ich denke nicht.Ein paar Dinge zu Herzen nehmen solltest Du Dir wohl schon. Wenn ihr Schleifen noch nicht hattet, kann der
FehlerLehrer Dein goto eigentlich nicht kritisieren. Gut wäre natürlich trotzdem, wenn Du es selbst anlernst.
-
Ok, Danke. Schleifen werde ich mir mal ansehn.

-
Davon abgesehen:
if (b2 == 0) { cout<<"y = "<<m2<<" * x"<<endl; goto punkt6; } if (b2 < 0) { cout<<"y = "<<m2<<" * x - "<<b4<<endl; goto punkt6; } cout<<"y = "<<m2<<" * x + "<<b2<<endl; punkt6:Besser:
if (b2 == 0) { cout<<"y = "<<m2<<" * x"<<endl; } else if (b2 < 0) { //wenn das erste if falsch war, prüfe b2 <0 cout<<"y = "<<m2<<" * x - "<<b4<<endl; } else cout<<"y = "<<m2<<" * x + "<<b2<<endl; //wenn auch das zweite if falsch war (und nur dann) führe das hier ausMacht soweit ich sehen kann das selbe, aber goto ist so unübersichtlich, sicher sein kann man sich da fast nie...
-
Achso. Danke, ich werds mal ändern

Aber müsste hinter dem else nicht noch ne geschweifte Klammer geöffnet werden?