Manchmal geht es, dann wieder nicht.
-
Hallo Leute ich bin nun nach langer Suche nach einem gutem Programmier Forum bei euch eingetreten.
Auf ein gutes gelingen :).
Ich bin nicht lange mit C am schaffen, erst seid einpaar Monate.
Hier ist der Ausschnitt des Sources:
http://nopaste.info/631c88cdb6.html
Erstens: While funktioniert nicht, eigentlich sollte bei der eingabe von 1 oder 2 die Schleife beendet sein.
Zweitens: Ich bekomme den vergleich einer Variabel (Integer) mit einem einer Zeichenkette nicht hin. Erstmal in der hinsicht auf die Syntax und weil es nicht funktioniert.
Drittens: Sobald man bei der eingabe(Integer) 1 oder 2 ein Zeichen eingibt, crashed es.
Viertens: Außerdem soll sobald ein Zeichen oder wenn nicht 1 und 2 eingaben wurde ein prinft statement ausgegeben werden.
Anfängerfehler
Vielen dank, möglichst bitte erkären :).
-
1. = ist eine Zuweisung, und == ein Vergleich. Aber nicht der Vergleich von Zeichenketten. Dazu strcmp.
2. 1 ist der Zahlenwert 1. '1' ist das Zeichen '1'. (edit: Moment, eingabe ist ja ein int. Da siehst du, was davon kommt, wenn man nicht allen Code zeigt. Vergiss diesen Hinweis)
3. Dann musst du eben Vorkehrungen für den Fall treffen. Sieh dir den Rückgabewert von scanf an, um zu entdecken, dass der Fall eingetreten ist und benutze dann passende andere Lesefunktionen, um die Nicht-Zahl-Zeichen zu überspringen.
4. Dann tu das.Außerdem poste Code bitte hier im Forum (mit cpp-Tags drumrum), wenn er nicht extrem lang ist. Und wenn er extrem lang ist, dann wird ihn sowieso niemand lesen, bis du ihn auf ein Minimum zusammengestutzt hast und dann sollte er wieder hier passen. Und Beispiele möglichst immer vollständig, so dass ein Helfer den Code 1:1 bei sich zuhause ausprobieren kann.
-
Aus dem Quelltext, ein wenig anders optisch dargestellt:
while (eingabe!=1 || eingabe!=2);//Das 1 Problem was nicht funktioniert. if(eingabe==0) system("cls"); printf("nThe game has been canceled!nn"); system("PAUSE"); exit(0);
Soll das so?
Oder ist da nicht ein ';' zu viel und ein Klammerpaar zu wenigVersuche mal den Quelltext mit Einrückungen und nicht so vielen Semikolon pro Zeile zu formatieren.
MfG f.-th.
-
Hab mirs noch mal angesehen.
Eventuell passt das mit dem Semikolon doch.
-
Klar passt das ; ist ja eine do-while Schleife.
Nur ist die Bedingung immer wahr.
eingabe = 1 -> (eingabe != 2) ist wahr
eingabe = 2 -> (eingabe != 1) ist wahr
eingabe = alles andere -> sowohl (eingabe != 1) ist wahr als auch (eingabe != 2) ist wahrDurch das logische Oder kommt dann immer wahr heraus.
-
Okay, weiter unten statt Kolon soll zu Semikolon
Aber warum packst du die if-Konstrukte nicht zusammen mit switch-case in die do-while-Schleife?
was macht
exit(0);
und was folgt für den nachfolgenden Quelltext
if(eingabe = "help")
// nicht nur '==' sondern auch noch ...
Aber ich geb zu ich hab da ein wenig den Überblick verloren
Quelltextabschnitt komplett neu aufbauenMfG f.-th.
-
Wenn der Code vom To ist, kann er das ja machen, aber
das ganze sieht nach einer Hausaufgabe aus
(9-Live: "Welchen Fehler suchen wir in diesem Code")
-
Hi!
Hier ist der ganze abschnitt des Quellcodes:
printf ("\n 1:Caculator \n 2:Guessing-Game 1-1000\n\n"); getchar(); do { printf ("What would you like to start: "); scanf("%d",&eingabe); fflush(stdin); if(eingabe == 0)break; } while (eingabe != 1 || eingabe != 2); if(eingabe == 0 ){system("cls");printf("\nThe game has been canceled!\n \n");system("PAUSE");exit(0);} else printf("Banane"); system("PAUSE"); switch(eingabe) { case 1:{system("cls");GuessingGame();break;} case 2:{system("cls");Caculator();break;} default: printf ("Error of the input!\n"),system("PAUSE"); } return 0; }
Ich habe einbissen etwas verändert, bei der do while funktion. Da ist es komisch, wenn ich eine 0 eingebe macht er was es soll, aber egal was ich sonst eingebe wie 1 oder 2 da passiert nichts.
Und danke für schnelle hilfe.
-
TheInter schrieb:
Ich habe einbissen etwas verändert, bei der do while funktion. Da ist es komisch, wenn ich eine 0 eingebe macht er was es soll, aber egal was ich sonst eingebe wie 1 oder 2 da passiert nichts.
Die Sache hatte ich schon beantwortet.
Warum schreibst du nicht einfach das hin, was du auch willst.
Die Schleife soll beendet werden, wenn eingabe gleich 1 oder gleich 2 oder gleich 0 ist.
Erstmal: ((eingabe == 1) || (eingabe == 2) || (eingabe == 0))
Das ist wqhr, wenn eine der Bedingungen zutrifft. Du brauchst aber das Gegenteil. Also musst du das Ganze negieren (mit ! ):while (!((eingabe == 1) || (eingabe == 2) || (eingabe == 0)));
Wenn dir das ! nicht gefällt, kannst du es auch in die Klammer ziehen, dann musst du allerdings die Bedingungen und Verknüpfungen invertieren.
Aus == wird != und aus || wird &&:while (((eingabe != 1) && (eingabe != 2) && (eingabe != 0)));
Dann brauchst du auch das
if
mit dembreak
nicht mehr.
-
Nicht schön, nicht getestet und Fehler gibt es auch noch (copy&paste)
do { printf ("What would you like to start: "); // menu noch ausschmücken? scanf("%d",&eingabe); switch(eingabe) { case 0:{system("cls");printf("\nThe game has been canceled!\n \n");system("PAUSE");exit(0);} case 1:{system("cls");GuessingGame();break;} case 2:{system("cls");Caculator();break;} default: printf ("Error of the input!\n"),system("PAUSE"); } }while( dein Spiel );
Darfst du das so weit ändern?