Zahlen raten
-
do { printf ("Errate meine Zahl zwischen 1 und 10"); scanf("%i",&userzahl); if (zufallzahl > userzahl) printf("..meine Zahl ist groesser\n"); if (userzahl > zufallzahl) printf("..meine Zahl ist kleiner\n"); } cout << "Weiterer Versuch (J/N)? "; cin >> antwort; while ('J' == antwort || 'j' == antwort); }
Hier oder?
-
Nochmal: zeige mir, wie eine do-while-Schleife aufgebaut ist. Nicht, wo sich eventuell eine Perversion einer do-while-Schleife in deinem Code befindet.
Schreibe exemplarisch eine Schleife nieder und poste sie hier. Hätte ich nach if gefragt, hätte ich sowas erwartet:
if(Bedingung) { //... }
Sowas für die do-while-Schleife. Es geht schließlich um die Syntax. Wo stehen die Schlüsselwörter, wo stehen die Klammern, wo steht deine Abbruchbedingung...
-
do { Anweisung1; Anweisung2; .... Anweisung_n; } while(<Bedingung>)
-
Brain91 schrieb:
do { Anweisung1; Anweisung2; .... Anweisung_n; } while(<Bedingung>)
Passt bis auf das fehlende Semikolon. Und jetzt zeig mir bitte in deinem richtigen Code mal die schließende, geschweifte Klammer vom do-Block (Zeilennummer reicht).
-
do { printf ("Errate meine Zahl zwischen 1 und 10"); scanf("%i",&userzahl); if (zufallzahl > userzahl) printf("..meine Zahl ist groesser\n"); if (userzahl > zufallzahl) printf("..meine Zahl ist kleiner\n"); }
Das oder?
-
Ja, die letzte Zeile davon ist die schließende, geschweifte Klammer des do-Blocks. Was muss nun folgen?
-
Die while Schleife mit Bedingung eigentlich
-
Brain91 schrieb:
Die while Schleife mit Bedingung eigentlich
Ja, genauergesagt das while-Schlüsselwort mit folgender Bedingung in Klammern und einem abschließendem Semikolon. Und was kommt bei dir?
-
erstmal die Frage und dann das mit while
-
Brain91 schrieb:
erstmal die Frage und dann das mit while
Falsch. Bei dir sieht es so aus:
if (userzahl > zufallzahl) printf("..meine Zahl ist kleiner\n"); } //Hier ist die schließende Klammer des do-Blocks. Es muss nun direkt darauf das while folgen! { //Bei dir folgt aber eine öffnende, geschweifte Klammer.
Klar? Du musst beim Programmieren präzise vorgehen. Ein Zeichen falsch, und der Compiler meckert (zu Recht). Wenn die Syntax so festgelegt ist, dass ein
do
, ein Block mitgeschweiften Klammern (kann man bei Einzeilenanweisungen weglassen, aber egal), dann daswhile
und dann die Bedingung in runden Klammern kommen soll, dann musst du das auch genau so machen. Da kannst du nicht einfach zwischendrin noch weitere zufällige Klammern oder gar ganzeif
-Anweisungen einstreuen. Kannst du deinen Code jetzt so umbauen, dass er wenigstens kompiliert wird?
-
#include <iostream>
#include <cstdlib>
#include <time.h>int main() { srand(time(0)); int zufallzahl,userzahl; char antwort; zufallzahl = rand() % 10; zufallzahl = zufallzahl+1; do { printf ("Errate meine Zahl zwischen 1 und 10"); scanf("%i",&userzahl); if (zufallzahl > userzahl) printf("..meine Zahl ist groesser\n"); if (userzahl > zufallzahl) printf("..meine Zahl ist kleiner\n"); cout << "Weiterer Versuch (J/N)? "; //Fehler `cout' undeclared (first use this function) cin >> antwort; } while ('J' == antwort || 'j' == antwort); while ( userzahl != zufallzahl ); printf("Geschafft\n"); system ("Pause"); return (0); }
wieder neuer fehler
-
Das heißt ja auch std::cout. Und es passt auch so gar nicht zum Rest des Programms. Nimm printf und stdio.h und du hast ein astreines C-Programm.
-
Rücke deinen Code erst mal vernünftig ein, bitte. Vorher hat es imho gar keinen Zweck, weiterzumachen. Einrückung ist dazu da, um Struktur in den Code zu bringen. Die geschweiften Klammern sind übrigens ein hervorragender Indikator für's Einrücken. So sieht ein gut formatiertes Programm aus:
int main() { if(Bedingung) { Anweisung; Anweisung; } while(Bedingung) { Anweisung; if(Bedingung) { Anweisung; Anweisung; } else { Anweisung; } } }
Man kann sofort erkennen, was z.B. genau zum while-Block gehört (und welche Klammern zusammengehören), einfach indem man sich die Einrückung ansieht. Deine Variante ist völlig unlesbar:
int main() { if(Bedingung) { Anweisung; Anweisung; } while(Bedingung) { Anweisung; if(Bedingung) { Anweisung; Anweisung; } else { Anweisung; }} }
Btw, du hast immer noch eine völlig unsinnige Zeile und potenzielle Endlosschleife in deinem Code...