Komischer Fehler- taste muss 2 mal gedrückt werden
-
Hi Leute,
Die exe des folgenden Programmes könnt ihr euch hier herunter laden:http://jesusfreak777.je.funpic.de/5.EXE
Hier ist der Code des Programms:
#include <conio.h> #include <stdio.h> float menue(int); void main(void) { //Mainfunktion wird ge”ffnet! int janein=0,tag=0,tagesanzahl=0,tagzwei=0,tagt=0,a=0,b=0,state; float tagestemperatur[31]={0},schnitt,vorschnitt; b=menue(a); if (b==49) { //if1 wird ge”ffnet do { //do1 wird ge”ffnet printf("\nFr den wie vielten Tag des Monats m”chten Sie die Temperatur einlesen?\n"); printf("Bitte beachten Sie, dass sie keinen Tag eingeben, der bereits definiert wurde!!!Das Programm arbeitet sonst nicht mehr korrekt!\n"); scanf("%i",&tag); if (tag>31||tag<1) { //if 2 wird ge”ffnet printf("\a\aFEHLER!!!\nSIE HABEN EINE UNZULŽSSIGE MONATSANZAHL EINGEGEBEN\n"); getch(); exit(state-'0'); } //if 2 wird geschlossen else printf("Wie hoch war die Temperatur am %i.?\nAngabe bitte in øC.\n",tag); scanf("%f",&tagestemperatur[tag]); printf("Okay, an Tag %i betrug die Temperatur %.2føC\nIhr Computer hat dies nun gespeichert!\n\n",tag,tagestemperatur[tag]); printf("Wollen Sie noch weitere Temperaturen einlesen? n/j\n"); tagesanzahl++; janein=getch(); //Asciicode fr n=110 //Asciicode fr j=106 }while(janein==106); b=menue(a); //do1 wird geschlossen } //if1 wird geschlossen if (b==27){exit(state-'0');} if (b==50) { //if 2 wird ge”ffnet if (tagesanzahl==0) { //if x wird ge”ffnet printf("\a\a\aES WURDEN NOCH KEINE TAGE EINGEGEBEN!!!! DU ZONK!!!!"); getch(); exit(state-'0'); } //if x wird geschlossen else do { //do2 wird ge”ffnet printf("\nFr welchen Tag wollen Sie gerne die Temperatur wissen?"); scanf("%i",&tagzwei); if (tagzwei>31||tagzwei<1) //if 3 wird ge”ffnet { printf("\a\aDU HAST EINEN UNZULŽSSIGEN WERT EINGEGEBEN!!!"); getch(); exit(state-'0'); //exit(); } //if 3 wird geschlossen else printf("\nDie Temperatur fr Tag %i betrug %.2føC\n",tagzwei,tagestemperatur[tagzwei]); printf("Wollen Sie fr noch einen Tag die Temperatur auslesen? j/n"); janein=getch(); } //do2 wird geschlossen while (janein==106); } //if 3 wird geschlossen //entscheid=3; b=menue(a); if (b==51) { //if 4 wird ge”ffnet if (tagesanzahl==0) { //if x wird ge”ffnet printf("\a\a\aES WURDEN NOCH KEINE TAGE EINGEGEBEN!!!! DU ZONK!!!!"); getch(); exit(state-'0'); } else for(tagt=0;tagt<=31;tagt++) { //for1 wird ge”ffnet vorschnitt=vorschnitt+tagestemperatur[tagt]; } //for1 wird geschlossen schnitt=(vorschnitt/tagesanzahl); printf("\nDie Durschnittstemperatur der bisher eingegebenen Tage betr„gt %.2føC",schnitt); } //if 4 wird geschlossen getch(); } //main wird geschlossen float menue(int entscheid) { textbackground(BLUE);textcolor(GREEN);clrscr(); printf("Programm zum Einlesen, Ausgeben der Temperatur oder Durschnittstemperatur eines Monats.\n\n\n"); printf("Menue:\n"); printf("<1>: Temperatur einlesen\n<2>: Tagestemperatur ausgeben\n<3>: Durchschnittstemperatur berechnen\n\n <Esc> Zum Beenden\n"); entscheid=getch(); return(entscheid); }
Und jetzt zum Problem:
Drücke ich im Menü am Anfang die 1 so springt der Compiler wie ich es auch gerne will sofort zu Punkt 1... bei Punkt 2 genauso... nur bei Punkt 3 ist das kleine Problem, dass man die Taste "3" zwei Mal drücken muss
Ich habe schon voll lange gerätselt und mir ist völlig suspekt, wie das sein kanncya
DavidPS:
-
achsoo und noch was:
Der sagt mir immer beim compilieren, eine Warnung, dass "exit" keinen "prototype" hat... was soll das?^^
-
Erstmal: Warum eigentlich float menu(int);? Du rechnest doch mit integers, und der Parameter wird auch nicht wirklich benötigt (das ist besser als lokale Variable aufgehoben).
Zweitens:
b=menue(a); if (b==49) { do { //... }while(janein==106); b=menue(a); } if (b==27){exit(state-'0');} if (b==50) { //... } b=menue(a); if (b==51) { //... }
(hab' mal die interne Logik rausgenommen)
Die über den ganzen Code verstreuten "b=menue(a);" Einträge sind etwas verwirrend. Du solltest den gesamten Hauptteil eher in eine Schleife packen:
while(1) { b=menue(); if(b=='1') Einlesen(); else if(b=='2') Ausgeben(); else if(b=='3') AusgebenDurchschnitt(); else break; }
Drittens: man: exit befindet sich in der <stdlib.h>
-
okay ich habe die fehler verbessert
jetzt geht auch alles... bis auf das ich die taste immer noch 2 mal drücken muss
Ne Idee???
Danke für die Antwort!!
David
-
Du hast auch zweimal b=menue(a) auf deinem Abarbeitungsweg (das erst mal am Anfang, danach noch einmal hinter dem Abschnitt "if(b==50){...}" - die müssen jeder auf eine eigene Eingabe warten.