getch() | variable hochzählen lassen
-
Hallo zusammen,
Ich muss zugeben der Titel ist etwas seltsam gewählt aber ich weiß nicht wie ich es sonst nennen sollIch habe folgenden Code geschrieben:
#include <stdio.h> #include <stdlib.h> int main() { int a, b,g_zucker, g_milch,g_kaffee,g_kaffee_entk,g_capp, g_mkaffee,g_tee,g_t_suppe, q, w, e, getraenk, milchmenge, zuckermenge, getraenk_staerke, auswahl, anfang, getraenke_art, staerke, wasser_behaelter,kaffee_behaelter, kaffee_entk_behaelter, cappuccino_behaelter, milchkaffee_behaelter, tomatensuppe_behaelter,zucker_behaelter, milch_behaelter,neu_getraenk,tasse, bechervorrat; zuckermenge = -25; milchmenge = -25; getraenk = 0; staerke = 0; kaffee_behaelter = 40; // 40 Einheiten auf stufe "schwach" [1*] kaffee_entk_behaelter = 40; cappuccino_behaelter = 40; milchkaffee_behaelter = 40; tomatensuppe_behaelter = 40; milch_behaelter = 40; // 40 Einheiten für 25% zucker_behaelter = 40; bechervorrat = 50; g_kaffee = 0; g_kaffee_entk = 0; g_capp = 0; g_mkaffee = 0; g_tee = 0; g_t_suppe = 0; g_zucker = 0; g_milch = 0; while (1) { /* Wasserbehälter */ //Wasser im Behälter?? wasserbehaelter: printf ("\n\n\nIst Wasser im Vorratsbehaelter?\n"); printf ("1 ja 2 nein \n"); wasser_behaelter = getch(); if (wasser_behaelter == '1') {anfang: printf ("\n\n\n\nGetraenk mit (1) waehlen\n"); printf ("Milchmenge mit (q) waehlen noch %d portionen uebrig\n",milch_behaelter); printf ("Zuckermenge (w) waehlen noch %d portionen uebrig\n",zucker_behaelter); printf ("Getraenkestaerke (e) waehlen\n"); printf ("\n\nZum bestaetigen (r) waehlen\n"); do //anfang getränkewahl +milch/zucker { a = getch(); // variable a wird ein tastenwert zugewiesen // Getränke wahl //Getränkewahl if (a == '1') //a = taste '1' { if (getraenk != 6) { getraenk = getraenk + 1; if (getraenk == 1) {getraenke_art = "Kaffee"; printf ("%s, noch %d Portionen (schwach) uebrig\n",getraenke_art, kaffee_behaelter); //%s welches getränk wurde gewählt %d = wert von kaffee_behaelter (portionen umgerechnet in "schwach") } if (getraenk == 2) {getraenke_art = "Kaffee entkoffeiniert"; printf ("%s, noch %d Portionen (schwach) uebrig\n",getraenke_art,kaffee_entk_behaelter); } if (getraenk == 3) {getraenke_art = "Milchkaffee"; printf ("%s, noch %d Portionen (schwach) uebrig\n",getraenke_art,milchkaffee_behaelter); } if (getraenk == 4) {getraenke_art = "Cappuccino"; printf ("%s, noch %d Portionen (schwach) uebrig\n",getraenke_art,cappuccino_behaelter); } if (getraenk == 5) {getraenke_art = "Tee"; printf ("%s\n",getraenke_art); } if (getraenk == 6) {getraenke_art = "Tomatensuppe"; printf ("%s, noch %d Portionen (schwach) uebrig\n",getraenke_art,tomatensuppe_behaelter); } } else {getraenk = 0; //wenn variable "getränk" auf den wert 6 springt, wird getränk auf 0 gesetzt } //um wieder neu hochzählen zu können } // end: if a =='1' } //end: do-while a=='1' while (a == '1' ); } // end if Wasserbehälter == 1 } //end: komplette Programm Schleife [while(1)] }//end: main()
Das Wichtigste spielt sich zwischen Zeile 29 und 99 ab. Ich frage ab welche Taste gedrückt wurde und es läuft eine Variable mit die hochzählt (um die verschiedenen Sorten auswählen zu können).
So nun zu meinem eigentlichen Problem:
Wenn ich das Programm starte und mit der Taste "1" die Sorten wähle und bei Tomatensuppe angekommen bin, aber ich will noch eins weiter gehen dann kommt statt Kaffee (laufvariable a müsste dann wieder den Wert 1 haben) einfach eine leere Zeile und bei erneutem drücken kommt erst Kaffee. Wieso kommt dort eine leere Zeile?Ich habe in meinem Programm das selbe Muster für eine Milch-portionen berechnung gemacht und dort kann ich eignetlich nur 25%,50%,75%,100%, auswählen. Wenn ich aber die leere Zeile lasse habe ich in meinem Kaffe letztendlich irgendein -Wert (ich glaub -1 war das) raus
Ich hoffe ich konnte das Problem annähernd beschreiben...
Danke schonmalps: Ich benutze Dev-cpp und wir sollten das Programm mit C schreiben
-
Genesis020 schrieb:
Ich benutze Dev-cpp und wir sollten das Programm mit C schreiben
das ist auch C - soweit passt das ... nur bist Du im C# Forum
-
koennt mal bitte ein mod oder admin in die forums beschreibung den kommentar hinzu fuegen: "Hat nichts mit C zu tun" ?
so langsan nimmt es ueberhand das hier immer mehr c gepostet wird
irgendwie bekommt das niemand auf die reihe...
-
Mr Evil schrieb:
koennt mal bitte ein mod oder admin in die forums beschreibung den kommentar hinzu fuegen: "Hat nichts mit C zu tun" ?
so langsan nimmt es ueberhand das hier immer mehr c gepostet wird
irgendwie bekommt das niemand auf die reihe...Oder das ANSI C Forum umbenennen in C (ANSI).
-
Dieser Thread wurde von Moderator/in CMatt aus dem Forum C# und .NET in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hallo,
wenn du bei "Tomatensuppe" angekommen bist, dann war das Programm gerade in diesem if hier:
if (getraenk == 6) {getraenke_art = "Tomatensuppe"; printf ("%s, noch %d Portionen (schwach) uebrig\n",getraenke_art,tomatensuppe_behaelter); }
d.h., getraenk hat den Wert 6, und der else-Zweig hier:
else {getraenk = 0; //wenn variable "getränk" auf den wert 6 springt, wird getränk auf 0 gesetzt }
wurde noch nicht erreicht (gehört zu einem anderen if).
Dann wird wieder eine Eingabe hier:
a = getch();
erwartet, a wird zwar wieder '1', aber getraenk hat sich nicht verändert, steht immer noch auf 6, deswegen wird erst jetzt, nach dem die Bedingung:
if (getraenk != 6)
nicht zutrifft, der oben erwähnte else-Zweig erreicht, in dem getraenk auf Null gesetzt wird. Also kann auch erst jetzt nach erneuter Wahl von '1' erkannt werden, dass
if (getraenk != 6)
erfüllt ist, weswegen
getraenk = getraenk + 1;
dazu führt, dass getraenk erst jetzt zu Eins wird, womit es zur "verzögerten" Auswahl von Kaffee kommen muss.
MfG,
Probe-Nutzer