Wieso wird immer nur "..." ausgegeben?



  • Bei folgenden Code wird immer nur "Sie haben die Prüfung leider nicht bestanden ausgegeben. Egal was für eine Note ich eingebe. Warum? Was ist falsch? 😕

    void Notenvergleich(void)
    {
     float Note;                   //Variablendeklaration für die Prüfungsnote
    
     if (Note >= 4,5)
    {
     gotoxy(17,5);                 //gehe zu Position ... und drucke ...
     printf("Sie haben die Pruefung leider nicht bestanden!");
    }
     else
     if (Note <= 4,5)
    {
     gotoxy(16,5);                 //gehe zu Position ... und drucke ...
     printf("Glueckwunsch! Sie haben die Pruefung bestanden.");
    }
     else
     if (Note == 4,5)
    {
     gotoxy(15,5);                 //gehe zu Position ... und drucke ...
     printf("Sie haben die Pruefung leider nicht bestanden!");
    }
     else
     if (Note <= 1,5)
    {
     gotoxy (10,5);                //gehe zu Position ... und drucke ...
     printf("Glueckwunsch! Sie haben die Pruefung mit Auszeichnung bestanden.");
    }
    }
    


  • Hier wird gar nichts eingegeben. Deine float-Variable ist uninitialisert, da steht ein zufälliger Wert drin. Das vierte if kann übrigens nie erreicht werden, weil alle Fälle bereits vom zweiten abgedeckt wurden.



  • Du gibst überhaupt keine Note ein, jedenfalls nicht so, dass der Wert am Ende in der Variable 'Note' steht. Die Variable wird deklariert, und direkt benutzt, ohne dass ihr jemals ein Wert zugewiesen wurde.

    Ich hatte dich in einem deiner letzten Threads darauf hingewiesen, dass du ein völlig falsches Verständnis von Variablen hast, und dass dein Programm nur durch Zufall funktioniert. Jetzt hast du ein pefektes Beispiel dafür, dass es auch mal danebengeht, wenn man sich darauf verläßt. Leider bist du nicht darauf eingegangen.



  • Ich habe angenommen das ihr euch denken können das, das nicht der komplette Code ist sondern nur ein Teil. 🙄

    /*
      Programm Name: Pruefungsbescheid
      Funktion: Prüfen ob bestanden oder nicht
      Datum: 29.10.03
    */
    
    #include <stdio.h>
    #include <conio.h>
    
    void Ueberschrift(void);
    void Noteneingabe(void);
    void Notenvergleich(void);
    void Beenden(void);
    //-------------------------------Hauptprogramm----------------------------------
     void main(void)
    {
     clrscr();              //Bildschirm löschen
     Ueberschrift();        //Überschrift anzeigen
     Noteneingabe();        //User gibt Zahlen an
     Notenvergleich();      //Zahlen Vergleichen
     getch();               //Auf Bestätigung warten
     Beenden();             //Beenden-Text aufrufen
    }
    //------------------------------Überschriftaufruf-------------------------------
    void Ueberschrift(void)
    {
     gotoxy (33,1);                 //gehe zu Position ...
     printf ("Pruefungsbescheid");  //drucke ...
     getch();                       //Warte auf Benutzerbestätigung
    }
    //--------------------------------Zahleneingabe--------------------------------
     :arrow_right: void Noteneingabe(void)
    {
     float Note;                   //Variablendeklaration für die Prüfungsnote
    
     gotoxy (23,3);
     printf("Geben sie die zu pruefende Note ein: ");      //gehe zu Position ...
     scanf ("%f",&Note);
    }
    //-------------------------------Zahlenvergleich--------------------------------
    void Notenvergleich(void)
    {
     float Note;                   //Variablendeklaration für die Prüfungsnote
    
     if (Note >= 4,5)
    {
     gotoxy(17,5);                 //gehe zu Position ... und drucke ...
     printf("Sie haben die Pruefung leider nicht bestanden!");
    }
     else
     if (Note <= 4,5)
    {
     gotoxy(16,5);                 //gehe zu Position ... und drucke ...
     printf("Glueckwunsch! Sie haben die Pruefung bestanden.");
    }
     else
     if (Note == 4,5)
    {
     gotoxy(15,5);                 //gehe zu Position ... und drucke ...
     printf("Sie haben die Pruefung leider nicht bestanden!");
    }
     else
     if (Note <= 1,5)
    {
     gotoxy (10,5);                //gehe zu Position ... und drucke ...
     printf("Glueckwunsch! Sie haben die Pruefung mit Auszeichnung bestanden.");
    }
    }
    //-------------------------------Beenden----------------------------------------
    void Beenden(void)
    {
     gotoxy (15,25);
     printf ("zurueck zum Betriebssystem: Beliebige Taste druecken");
     getch();
    }
    

    ➡ Jetzt ist der code komplett...



  • Das ändert nichts.

    Die float-Variablen in Noteneingabe und Notenvergleich haben nichts miteinander zu tun. Gleiche Namen helfen dir hier nicht weiter.



  • MFK schrieb:

    Das ändert nichts.

    Die float-Variablen in Noteneingabe und Notenvergleich haben nichts miteinander zu tun. Gleiche Namen helfen dir hier nicht weiter.

    😕 Das kapier ich nicht! Warum funktioniert das so nicht. Ich dachte man muss die Variable in jeder Anweisung deklarieren und dann erkennt auch jede Anweisung in der deklariert wurde diese Variable. Muss man die Variable für den ganzen Code bekanntmachen oder was? 😕



  • Anfänger01 schrieb:

    Ich dachte man muss die Variable in jeder Anweisung deklarieren und dann erkennt auch jede Anweisung in der deklariert wurde diese Variable.

    Das ist im Prinzip richtig. Nur hast du dann in jeder "Anweisung" (eigentlich heißt das Funktion) eine eigene Variable.

    Muss man die Variable für den ganzen Code bekanntmachen oder was? 😕

    Das wäre eine Möglichkeit, allerdings die weniger saubere.

    Ein besserer Ansatz:
    Deine Funktionen sind alle void(void). Warum?
    Warum lässt du Noteneingabe nicht float zurückgeben und verpasst Notenvergleich einen float-Parameter?



  • Wie muss ich den Code dafür umschreiben? 😕 Kannst du das vieleicht mal an dem Code von oben zeigen und kommentieren?



  • Ich hab dir das schonmal erklärt, aber du hast es ignoriert: http://www.c-plusplus.net/forum/viewtopic.php?t=54100&highlight=



  • geht aber immer noch nicht... 😞

    /*
      Programm Name: Pruefungsbescheid
      Funktion: Prüfen ob bestanden oder nicht
      Datum: 29.10.03
    */
    
    #include <stdio.h>
    #include <conio.h>
    
    void Ueberschrift(void);
    float Noteneingabe();
    void Notenvergleich(void);
    void Beenden(void);
    //-----------------------------Variablendeklaration-----------------------------
     float main()
    {
     float Note
    
     Note = PruefungsNote();
     Notenvergleich(Note);
     return 0;
    }
    //---------------------------------Hauptfunktion--------------------------------
     void main(void)
    {
     clrscr();              //Bildschirm löschen
     Ueberschrift();        //Überschrift anzeigen
     Noteneingabe();        //User gibt Zahlen an
     Notenvergleich();      //Zahlen Vergleichen
     getch();               //Auf Bestätigung warten
     Beenden();             //Beenden-Text aufrufen
    }
    //------------------------------Überschriftaufruf-------------------------------
    void Ueberschrift(void)
    {
     gotoxy (33,1);                 //gehe zu Position ...
     printf ("Pruefungsbescheid");  //drucke ...
     getch();                       //Warte auf Benutzerbestätigung
    }
    //--------------------------------Zahleneingabe--------------------------------
    float Noteneingabe()
    {
     float PruefungsNote;                   //Variablendeklaration für die Prüfungsnote
    
     gotoxy (23,3);
     printf("Geben sie die zu pruefende Note ein: ");      //gehe zu Position ...
     scanf ("%f",&PruefungsNote);
     return PruefungsNote;
    }
    //-------------------------------Zahlenvergleich--------------------------------
    void Notenvergleich(float Note)
    {
     if (Note >= 4,5)
    {
     gotoxy(17,5);                 //gehe zu Position ... und drucke ...
     printf("Sie haben die Pruefung leider nicht bestanden!");
    }
     else
     if (Note <= 4,5)
    {
     gotoxy(16,5);                 //gehe zu Position ... und drucke ...
     printf("Glueckwunsch! Sie haben die Pruefung bestanden.");
    }
     else
     if (Note == 4,5)
    {
     gotoxy(15,5);                 //gehe zu Position ... und drucke ...
     printf("Sie haben die Pruefung leider nicht bestanden!");
    }
     else
     if (Note <= 1,5)
    {
     gotoxy (10,5);                //gehe zu Position ... und drucke ...
     printf("Glueckwunsch! Sie haben die Pruefung mit Auszeichnung bestanden.");
    }
    }
    //-------------------------------Beenden----------------------------------------
    void Beenden(void)
    {
     gotoxy (15,25);
     printf ("zurueck zum Betriebssystem: Beliebige Taste druecken");
     getch();
    }
    


  • Ich gebs einfach auf.



  • [hab mich verlesen]



  • Anfänger01 schrieb:

    geht aber immer noch nicht... 😞

    Wenn du Hilfe willst, solltest du es den Helfenden leicht machen. "Geht nicht" ist eine schlechte Fehlerbeschreibung!

    Ohne Anspruch auf Vollständigkeit:

    - Der Prototyp für Notenvergleich unterscheidet sich von der tatsächlichen Funktion (anderer Parametertyp)

    - Warum hast du zwei main-Funktionen?

    - Bei der Definition von float Note fehlt das Semikolon

    - Was ist PruefungsNote? Die Funktion, die du da aufrufen willst, heißt Noteneingabe.

    Ein wenig mehr Sorgfalt wäre wohl angebracht.



  • Anfänder01 schrieb:

    ...

    void Notenvergleich(void)
    {
     .
     if (Note >= 4,5)
    ....
    }
    

    Aehh, du solltest leiber

    void Notenvergleich(void)
    {
     .
     if (Note >= 4.5)
    ....
    }
    

    schreiben. Also 4.5 nicht 4,5....



  • Also wenn ich das richtig sehe, möchtest du erfahren, dass man im C-Code Kommazahlen mit einem Punkt und nicht einem Komma macht.

    if (note <= 4,5) z.B. wertet (note <= 4) aus, schmeißt das ergebnis weg und nimtm die 5. 5 ist eine Zahl ungleich 0, damit ist der Fall erfüllt, die Note wird nicht einbezogen.



  • @Anfänder01:

    👍 Advanced Trolling!



  • Hi,

    langsam gehört das hier aber wirklich ins Trollforum.

    Der Code, den er oben postet, ist absolut nicht compilefähig (falsche Prototypen, Semikolon fehlt, Komma statt Punkt).

    Falls es ernstgemeint ist, würde ich mir mal überlegen, ob Coding wirklich das richtige für mich ist: Durch pure Logik kommt man darauf, dass nur die ersten beiden ifs überhaupt jemals ausgeführt werden und dass NotenVergleich() zweimal aufgerufen wird und beim zweiten Mal ohne Parameter (d.h. eine der beiden Stellen kann gar nicht compilen :D).

    ChrisM


Anmelden zum Antworten