Frage zu if else



  • Hallo liebe Community,
    ich habe heute erst mit C-Programieren angefangen und habe eine Frage an euch.
    Und zwar ist es mein Ziel, dass man wenn man ein rundes Alter eingibt einem zum runden Geburtstag gratuliert wird. Ansonsten ganz normal gratuliert.

    /* Geburstags Gratulation
     * erstellt: 30-10-2012
     */
    
    #include <stdio.h>
    
    int main () {
    int alter;
    printf ("Alter: ");
    scanf ("%d", &alter);
    
    if (alter = 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150)
    {
    printf ("Herzlichen Glückwunsch zum runden Geburstag\n");
    }
    else (alter != 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150);
    printf ("Herzlichen Glückwunsch\n");
    
    return (0);
    }
    

    das ist mein Text.
    Der Compiler und auch der Debugger sagen keine Fehler an.
    Aber wenn ich jetzt eine Zahl eingebe, bekomme ich beide Texte angezeigt:

    custom@custom:~$ ./geburtstag
    Alter: 22
    Herzlichen Glückwunsch zum runden Geburstag
    Herzlichen Glückwunsch
    
    custom@custom:~$ ./geburtstag
    Alter: 20
    Herzlichen Glückwunsch zum runden Geburstag
    Herzlichen Glückwunsch
    

    Wo ist denn mein Fehler?
    Schonmal vielen dank!



  • 1. So funktioniert das nicht mit den Bedingungen.
    2. Ist das = in Zeile 12 eine Zuweisung und kein Vergleich.
    3. bei else steht keine Bedingung mehr. Es sei du schreibst noch ein if davor.

    Der Vergleich auf Gleichheit geht mit ==
    Das bezieht sich auf 2 Werte. Einer links vom ==, einer rechts davon.
    Wenn du mehrere Bedingungen gleichzeitig testen willst, musst du die logisch Verknüpfen.
    Das geht mit && (UND-Verknüpfung) und || (ODER-Verknüpfung)

    if (alter == 10 || alter == 20) 
      printf ("Herzlichen Glückwunsch zum runden Geburstag\n");
    else 
      printf ("Herzlichen Glückwunsch\n");
    

    Ist natürlich etwas Schreibarbeit.

    Wenn man sich aber überlegt was so einen runden Geburtstag ausmacht, kann man das auch berechnen.



  • hallo kellerkind

    vergleiche werden einzeln mit dem vergleichsoperator(doppeltes gleichheitszeichen ==) durchgeführt und eventuell mit logischen operatoren wie &&, || verknüpft.
    du müsstest also schreiben

    if (alter == 10 || alter == 20 || alter == 30 ... ) // usw.
    {
        printf ("Herzlichen Glückwunsch zum runden Geburstag\n");
    }
    else
    {
        printf ("Herzlichen Glückwunsch\n");
    }
    

    hier bietet sich der modulo operator an, damit du nicht alle werte hinschreiben musst:

    if ( 0 == alter % 10 ) // alter <= 0 wurde bereits ausgeschlossen
    {
        printf ("Herzlichen Glückwunsch zum runden Geburstag\n");
    }
    else
    {
        printf ("Herzlichen Glückwunsch\n");
    }
    


  • Mehrere Dinge. Zunächst ist

    if (alter = 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150)
    

    kein Prüfung, ob alter eins von 10, 20, etc. ist, sondern eine Zuweisung des Wertes 150 an die Variable alter. Das deshalb, weil der Wert des Ausdrucks

    a, b, c
    

    c ist. Das relevante Stichwort zum Nachschlagen ist "Komma-Operator." Außerdem ist

    a = b
    

    eine Zuweisung; der Wert des Ausdrucks ist der zugewiesene Wert. Das ist in diesem Fall 150, als ungleich 0, und wird dementsprechend von if als wahr verstanden.

    Weiter unten schreibst du

    else (alter != 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150);
    

    ...hier findet keine Prüfung statt, weil kein if da steht, und die Komma-Problematik taucht wieder auf. (alter != ...) wird als eigenständiger Ausdruck genommen, der keine Nebenwirkungen hat (also hier nichts macht).

    Zusammengekürzt hast du da stehen

    if(alter = 150) { /* Zuweisung! Immer wahr, weil 150 != 0 */
      printf ("Herzlichen Glückwunsch zum runden Geburstag\n");
    } else {
      alter != 150; /* Bewirkt hier nichts. */
    }
    
    printf ("Herzlichen Glückwunsch\n");
    

    ...womit sich das Verhalten erklären dürfte.

    Um den Algorithmus zu schreiben, so wie du ihn da stehen hast, müsste man

    if(alter ==  10 || alter ==  20 || alter ==  30 || alter ==  40 || alter ==  50 || 
       alter ==  60 || alter ==  70 || alter ==  80 || alter ==  90 || alter == 100 || 
       alter == 110 || alter == 120 || alter == 130 || alter == 140 || alter == 150)
    

    schreiben. Glücklicherweise geht das einfacher:

    if(alter % 10 == 0)
    


  • Perfekt! Vielen Dank euch!


Log in to reply