Seite 1 von 1

Eine einfache Abfrage will nicht wie ich will

Verfasst: Mi Feb 20, 2019 5:35 pm
von Kay
Ich sitze seit heute morgen um 9:00 und versuche mit hilfe verschiedener Quellen diese einfache Abfrage zu programieren aber sie reagiert unter allen drei Bedingungen (ja, nein oder falsche Taste) wie falsche Taste. Ich kann auch mitlerweile nicht mehr ausschließen das ich durch die Verwendung verschiedener Quellen und eigentlich jetzt mehr durch probieren als durch verstehen Fehler eingebaut habe.
Ich bitte also die Erfahreneren nachdem sie sich ausgelacht haben :lol: und mir ihre schmähungen unterbreitet haben :oops: mir nicht nur zu sagen wie es richtig wäre sonder auch wo mein Fehler liegt. Denn ich möchte ja lernen. Danke

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
//------------------------------------ Regelabfrage -------------------------------------
char c_regel;
char buf[2];
while (c_regel!='j'|c_regel!='n')
    {
    system("cls");
    printf("\n********************************* Wuerfelspiel *********************************\n\n");
    printf("\n\nKennst du die Regeln? (j/n) ");
    fgets(buf,2,stdin);
    c_regel=getchar();
    }
if (c_regel=='n')
    {
    printf("\n\n  Du tippst wie der erste und der zweite Wuerfel fallen wird.");
    printf("\n  Tippe welche Farbe der dritte Wuerfel zeigen Wird.");
    printf("\n  Sind die Wuerfel 1+2 ungleich wird die kleinere von der groesseren Zahl\n  abgezogen.");
    printf("\n  Sind die Wuerfel 1+2 gleich werden sie mit einander multipliziert");
    printf("\n  Wenn du die Farbe des dritten Wuerfels richtig tippst erhälst du 10 Punkte");
    printf("\n  Wenn du die Farbe des dritten Wuerfels nicht richtig tippst werden dir\n  5 Punkte abgezogen");
    }
else
    {printf("\n\n\tWuerfelspiel");


}
 return 0;
}

Re: Eine einfache Abfrage will nicht wie ich will

Verfasst: Mi Feb 20, 2019 6:36 pm
von Xin
Hey,

also was ich auf Anhieb sehe ist dass die While-Bedingung mit | nicht passt. Du willst vermutlich solange fragen, bis die Antwort c_regel =='j' || c_regel =='n' ist, alternativ solange Du c_regel != 'j' && c_regel != 'n' ist.

Das nächste Problem ist getchar(). Wenn Du Dir c_regel mit printf("%d\n", c_regel ); ausgeben lässt kommt da immer das Return-Zeichen an (Zeichen Nummer 10).
Das wundert mich jetzt ehrlich gesagt auch, aber das zu erforschen fehlt mir gerade die Zeit. ^^

Mal abgesehen davon, dass C für solche Fragespiele wirklich sehr bescheiden ausgestattet ist, würde ich mich mal an gets versuchen oder scanf in Verbindung mit folgendem aus der C-FAQ.

Ich müsste da jetzt auch erstmal ausprobieren. Der Grund warum ich da nach 25 Jahren C jetzt auch nicht sofort eine klare Antwort habe ist einfach: Diese ganzen Befehle sind so *!@**, dass ich sie niemals freiwillig benutze, ergo auch nicht fit in deren Gemeinheiten bin. Entsprechende Warnungen findest Du in den entsprechenden Seiten. Das Programm unter getchar habe ich garantiert getestet, arbeitet bei mir unter Windows aber auch nicht erwartungsgemäß. Das in etwa meine ich mit *!@**... ;)

Schau Dir unter Windows vielleicht mal getch() an. Dafür google mal "conio.h". Unter Linux wäre ncurses Dein Suchbegriff.

Re: Eine einfache Abfrage will nicht wie ich will

Verfasst: Do Feb 21, 2019 8:41 am
von nufan
Hallo Kay!

Du liest hier zuerst mit fgets() und direkt danach mit getchar() von der Standardeingabe:
Kay hat geschrieben:

Code: Alles auswählen

fgets(buf,2,stdin);
c_regel=getchar();
"buf" wird auch im restlichen Programm nicht verwendet, was versuchst du mit dieser Eingabe zu erreichen?

Wenn du die Schleifen-Bedingung wie von Xin beschrieben anpasst und das fgets() weglässt, sollte sich das Programm so verhalten wie du es dir erwartest.

Re: Eine einfache Abfrage will nicht wie ich will

Verfasst: Do Feb 21, 2019 8:56 am
von Xin
nufan hat geschrieben:
Do Feb 21, 2019 8:41 am
Du liest hier zuerst mit fgets() und direkt danach mit getchar() von der Standardeingabe:
Stirnklatsch... das erklärt das mir vollkommen unerklärliche Newline... meinst Du, mir wäre das fgets mal aufgefallen!?
Ich habe gerade versucht rauszufinden, ob das gestern auch schon da war. :D

Re: Eine einfache Abfrage will nicht wie ich will

Verfasst: Do Feb 21, 2019 6:22 pm
von Kay
nufan, Xin, vielen Dank. wie gesagt ich habe vieles ausprobiert und ich habe viele Dinge ein und wieder ausgebaut oder wohl eben nicht. Und dann sieht man irgend wann den Wald nicht mehr vor Bäumen. Danke.Werde jetzt fleißig weiter üben.