if anweisung über if anweisung



  • hallo! ich würde gerne das programm so hinbringen dass das es nut bei den eingegebenen werten von 1,2 oder define 3 ausgibt. kann man da so wie in zeile 18 eine if anweisung über einer anderen if anweisung machen ?

    #include <stdio.h>
    #include <stdlib.h>
    #define VERLASSEN 3
    
    int eingabe;
    int i;
    int funktionAuswahl (int zahl);
    
    
    int funktionAuswahl (int zahl){
    
        printf("\n1 - Akustisches Signal des PCs \n");
        printf("2 - Bericht anzeigen \n");
        printf("3 - Verlassen \n\n");
        printf("Geben Sie Ihre Wahl ein: ");
        scanf ("%ld", &zahl);
        
        if (zahl ==1 || zahl ==2 ||zahl == VERLASSEN) {
    
            if (zahl==1) {
            printf("\nAkustisches Signal des PCs \n\a");
            return zahl;
            }
            else if (zahl==2) {
            return zahl;
            }
            else if (zahl==VERLASSEN) {
            return zahl;
            }
        } else {
            printf("\n Falsche Eingabe")}          
    }
    
    void ausgabe () {
        printf("\nMusterausgabe(endlich gescchafft lol)\n");
    }
    
    
    int main() {
    
        do {
    
        i = funktionAuswahl(eingabe);
    
        if (i == 2) {
            ausgabe ();
        }
    
        }while (i != VERLASSEN);
    
    
        return 0;
    }
    


  • Verwende in funktionsauswahl eine Schleife (statt if), die du nur verlässt, wenn 1,2 oder 3 eingegeben wurde.
    Die printf müssen mit in die Schleife.


  • Mod

    Wenn ich deine Frage richtig verstehe: Du kannst ifs beliebig verschachteln. Zumindest prinzipiell, und oft ist das auch nützlich. In diesem Fall ist es jedoch eher unnötig, denn die erste Prüfung in Zeile 18 kannst du dir auch sparen, da du den gleichen Effekt effektiver erreichst, indem du das else aus Zeile 30 stattdessen als Ende der if-Kaskade in Zeile 20-28 nimmst.

    Du solltest dir auch überlegen, was im Fehlerfall passieren soll. Derzeit läuft der Programmfluss dann ins nichts und die Funktion gibt irgendwelchen Müll zurück. Das Verhalten ist genau genommen sogar undefiniert und es könnte wer weiß was passieren.



  • Danke für die Hilfe ich habs jz so grmacht und funktioniert auch

    #include <stdio.h>
    #include <stdlib.h>
    #define VERLASSEN 3
    
    int eingabe;
    int i;
    int funktionAuswahl (int zahl);
    
    
    int funktionAuswahl (int zahl){
    
        printf("\n1 - Akustisches Signal des PCs \n");
        printf("2 - Bericht anzeigen \n");
        printf("3 - Verlassen \n\n");
        printf("Geben Sie Ihre Wahl ein: ");
        scanf ("%d", &zahl);
    
            if (zahl==1) {
            printf("\nAkustisches Signal des PCs \n\a");
            return zahl;
        }
            else if (zahl==2) {
            return zahl;
        }
            else if (zahl==VERLASSEN) {
            printf("\nVerlassen\n");
            return zahl;
        }
            else {
            printf("\nFalsche Eingabe:%d\n3nur die Zahl 1,2 oder 3\n", zahl);
            return zahl;
        }
    }
    
    void ausgabe () {
    printf("\nMusterausgabe (endlich gescchafft lol)\n"); }
    
    
    int main()
    {
        do {
    
        i = funktionAuswahl(eingabe);
    
        if (i == 2) {
            ausgabe ();
        }
    
        }while (i != VERLASSEN && i==1 || i ==2);
    
        return 0;
    }
    


  • Warum eine symbolische Konstante für 3 und nicht auch für 1 und 2?
    Warum globale Variablen?
    Warum eine Funktionsdeklaration direkt vor der Definition?

    i = funktionAuswahl(eingabe);
    

    Wofür der Parameter?

    #include <stdio.h>
    
    typedef enum choice_tag { SOUND = 1, REPORT, EXIT, MAX_CHOICE } choice_t;
    
    void clear(FILE *stream)
    {
        int ch;
        while ((ch = fgetc(stream)) != '\n' && ch != EOF);
    }
    
    choice_t menu(void)
    {
        int input;
        for (;;) {
            puts("\n1 - Akustisches Signal des PCs\n"
                   "2 - Bericht anzeigen \n"
                   "3 - Verlassen\n");
            printf("Geben Sie Ihre Wahl ein: ");
            if (scanf("%d", &input) != 1) {
                fputs("Input error!\n", stderr);
                clear(stdin);
                continue;
            }
            if (!input || MAX_CHOICE <= input) {
                fputs("Input out of range!\n", stderr);
                continue;
            }
            else break;
        }
    
        return input;
    }
    
    void test()
    {
        puts("Musterausgabe.");
    }
    
    
    int main(void)
    {
        choice_t choice;
        while ((choice = menu()) != EXIT) {
            switch (choice) {
                case SOUND:
                    puts("sound\n");
                    break;
                case REPORT:
                    test();
                    break;
            }
        }
        puts("bye.\n");
    }
    

Log in to reply