Eine einfache Abfrage will nicht wie ich will

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Kay
Beiträge: 6
Registriert: Di Dez 15, 2015 5:13 pm

Eine einfache Abfrage will nicht wie ich will

Beitrag von Kay » Mi Feb 20, 2019 5:35 pm

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;
}

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Eine einfache Abfrage will nicht wie ich will

Beitrag von Xin » Mi Feb 20, 2019 6:36 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Eine einfache Abfrage will nicht wie ich will

Beitrag von nufan » Do Feb 21, 2019 8:41 am

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Eine einfache Abfrage will nicht wie ich will

Beitrag von Xin » Do Feb 21, 2019 8:56 am

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
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Kay
Beiträge: 6
Registriert: Di Dez 15, 2015 5:13 pm

Re: Eine einfache Abfrage will nicht wie ich will

Beitrag von Kay » Do Feb 21, 2019 6:22 pm

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.

Antworten