Programm Problme
-
sers,
wenn man bei diesen Programm ein buchstabe angibt, brint er ständig falsch ohne ende, warum, was kann man dagegben tun ?
Wie bringe ich meine goto's weg ?#include <iostream> #include <stdlib.h> #include <time.h> #include <conio.h> using namespace std; int main() { int zahlen[3], ergebnis, pruefung; srand ((unsigned) time (NULL)); neu:; for (int i =1; i <= 3; i++) zahlen[i]=(rand()%10); nochmal:; cout << "\n\n\t\t" << zahlen[1] << " "<< "x" << " " << zahlen[2] << " " << " " << "+" << " " << " " <<zahlen[3] << "=" << " "; cin >> ergebnis; pruefung = zahlen[1]*zahlen[2]+zahlen[3]; if(pruefung == ergebnis) { cout << "\n\n\t\t Richtig!!"; goto neu; } else { cout << "\n\n\t\t Falsch!!"; goto nochmal; } }
bitte hilft mir
danke
bye ??Linux
-
1.) Wenn Du einen Buchstaben mit eingibst ist ergebnis=0 weil ein Buchstabe ja keine Zahl ist Ist folglich also vollkommen richtig... Geb halt keine Buchstaben ein! Oder pack den Inhalt in ein Char-Array und sortiere das dann in einer eigenen Funktion selber in ein ein int um.
2.) Ungefähr so:
//PSEUDO while(1) { Erstelle Zufallszahlen; do { Zeige Aufgabe; Frage Ergebnis ab; }while(ergebnis falsch); }
der Richtige Ansatz sollte daraus klar werden...
3.)Im moment hast Du Zufallszahlen von 0 bis 9, Ich denke mal 1 bis 10 ist eher das was Du willst oder? Dann müsste das so lauten "zahlen[i]=(rand()%10)+1;"
-
#include <iostream> #include <stdlib.h> #include <time.h> #include <conio.h> using namespace std; int main() { int zahlen[3], ergebnis, pruefung; // ein array von int mit 3 Werten! srand ((unsigned) time (NULL)); neu:; for (int i =1; i <= 3; i++) zahlen[i]=(rand()%10); nochmal:; cout << "\n\n\t\t" << zahlen[1] /* 2. Element */ << " "<< "x" << " " << zahlen[2] /* 3. Element */ << " " << " " << "+" << " " << " " <<zahlen[3] /* 4. Element ***ups*** */ << "=" << " "; cin >> ergebnis; pruefung = zahlen[1]*zahlen[2]+zahlen[3]; // selber Fehler s. bei cout! if(pruefung == ergebnis) { cout << "\n\n\t\t Richtig!!"; goto neu; } else { cout << "\n\n\t\t Falsch!!"; goto nochmal; } }
die goto's lassen sich durch eine Fussgesteuerte do-while schleife entfernen.
do { // cout und cin und der andere kram } while ( ergebnis != pruefung )
Ein Array wird mit der Anzahl an Werten initialisiert jedoch ab dem index 0
angesprochen. Mit zahlen[3] = 10 schreibst du über das Array hinaus! (Buffer overflow).
zahlen[3] ist undefiniert und liefert irgendetwas im Speicher. Deswegen wirst
du nur durch zufall das richtige Ergebnis bei cin raten.
-
#include <iostream> #include <ctime> #include <cstdlib> using namespace std; int main() { int zahlen[3], ergebnis, pruefung; // ein array von int mit 3 Werten! srand ((unsigned) time (NULL)); neu: for (int i = 1; i <= 3; ++i) zahlen[i]=(rand()%10); nochmal: cout << "\n\n\t\t" << zahlen[1] /* 2. Element */ << " "<< "x" << " " << zahlen[2] /* 3. Element */ << " " << " " << "+" << " " << " " <<zahlen[3] /* 4. Element ***ups*** */ << "=" << " "; cin >> ergebnis; pruefung = zahlen[1]*zahlen[2]+zahlen[3]; // selber Fehler s. bei cout! if(pruefung == ergebnis) { cout << "\n\n\t\t Richtig!!"; goto neu; } else { cout << "\n\n\t\t Falsch!!"; goto nochmal; } }
-
solltest dich was schämen! goto! igit
-
Wer es nicht besser kann, sollte nichts sagen.
Bye, TGGC (Der Held ist zurück)
-
TGGC schrieb:
Wer es nicht besser kann, sollte nichts sagen.
Bitte keine unbegründeten Unterstellungen.
Und wenn ihr jetzt streiten müsst, und das ohne das Thema des Threads weiterzuverfolgen, dann bitte per Mail.
-
sers,
Das mit dem goto's hab ich verstanden und habe die weg, nur das mit den buchstaben nicht, schreibt mir doch das Programm so um bitte, das es dieses Problem nicht mehr gibt
#include <iostream> #include <stdlib.h> #include <time.h> #include <conio.h> using namespace std; int main() { int zahlen[4], ergebnis, pruefung; srand ((unsigned) time (NULL)); do { for (int i =1; i <= 3; i++) zahlen[i]=(rand()%10)+1; for(;;) { cout << "\n\n\n\t\t" << zahlen[1] << " "<< "x" << " " << zahlen[2] << " " << " " << "+" << " " << " " <<zahlen[3] << "=" << " "; cin >> ergebnis; pruefung = zahlen[1]*zahlen[2]+zahlen[3]; switch(ergebnis) { case 123: cout << "\n\t" << pruefung; continue; break; } if( ergebnis != pruefung) { cout << "\t\tFalsch"; continue; } else { break; } } cout << "\t\tRichtig"; }while( ergebnis == pruefung ); }
bye ??Linux