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("\nFr 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 fr n=110
    //Asciicode fr 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("\nFr 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 fr Tag %i betrug %.2føC\n",tagzwei,tagestemperatur[tagzwei]);
    printf("Wollen Sie fr 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 kann 😕 😕 😕

    cya
    David

    PS: 😋 😋 😋 😋 😋 😋 😋



  • 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.


Anmelden zum Antworten