Problem mit if schleife



  • Hey leute,

    ich muss mich wegen meinem grundstudium mit c auseinandersetzen und fange gerade an die ersten kleinen programme zu schreiben. Ich habe im folgenden Programm eine kleines problem:

    //verwendete Programmbibilothek/en
    
    #include <stdio.h>
    #include <stdlib.h>
    
    //Programmstart
    int main(void)
    {
    
        //Zuweisung der Variablen
    
        int i;       //Ganze Zahl Bezeichnung: i
        char h;      //Alphanumerische Zeichen Bezeichung: h
    
        //Anzeige für den Benutzer: Altersabfrage
    
        printf ("Bitte geben sie ihr alter ein:");
    
        //Überprüft die Eingabe der Altersabfrage
    
        scanf ("%d",&i);
        printf("Du bist %d Jahre alt.\n", i);
    
        if(i > 0);
             printf ("Bitte gib deinen Namen ein:");
             scanf ("%c",&h);
    
        //Ausgabe der eingegebenen Zahl und des Namens:
    
        printf ("Du bist also %d Jahre alt und hast nen ziemlich beschissenen Namen, %c",i ,h);
    
        //laesst das CMD Fenster nach Beenden des Programms offen.
    
    system("pause");
    
        return 0;
    
    }
    

    Ich möchte das nach der ersten abfrage und eingabe, eine zweite abfrage und eingabe kommt und dannach sollen beide eingaben durch den letzten satz bestätigt werden. Ich finde nur meinen fehler in diesem programm nicht, könnt ihr mir da weiterhelfen ?

    dankeschön


  • Mod

    www.if-schleife.de

    Außerdem guck dir mal die Syntax von if an. Deine Zeile 24 macht nämlich gar nichts. Von deiner Einrückung zu schließen her willst du vermutlich die Zeilen 26 und 27 in geschweifte Klammern setzen.

    Außerdem noch ein Tipp: Versuch bei deinem Compiler möglichst viele Warnungen einzuschalten. Der GCC beispielsweise hätte dich dann auf deine ungewöhnliche Benutzung von if aufmerksam gemacht.

    Und noch ein Tipp: char ist ein Zeichen, nicht mehrere.



  • h soll mehrere Zeichen aufnehmen, deshalb muss du dafür ein Array definieren:
    char h[100];
    und später dann auch den Formatstring "%c" durch den für Strings "%s" ersetzen; das Semikolon war auch falsch, du must einen Block {} verwenden:

    if(i > 0)
        {
             printf ("Bitte gib deinen Namen ein:");
             scanf ("%99s",h);
    
        //Ausgabe der eingegebenen Zahl und des Namens:
    
        printf ("Du bist also %d Jahre alt und hast nen ziemlich beschissenen Namen, %s",i ,h);
        }
    

    Falls du VisualStudio verwendest, kannst du zum Testlauf auch Strg+F5 verwenden und dadurch das hässliche system("pause") einsparen.



  • Hey, also wieder was gelernt, danke euch 🙂

    Kurz zusammengefasst:

    char h[100];
    

    Damit sag ich ihm das ich der variablen h char zuweise, und char bis zu [100] zeichen aufnehmen soll ? Ist das richtig ? Wenn ich nun dort [200] eingebe, nimmt h bis zu 200 zeichen auf?

    Desweiteren muss ich diese "if" anweisungen die nach if folgen sollen immer in geschweifte klammern setzen richtig ? wieso ?

    Was bedeutet

    scanf ("%99s",h);
    

    ? Ich weiß das dort die eingabe von h geprüft wird, nur was bedeutet "%99" und %s?

    Und wieso muss man " ; " setzen, was sagen die aus ?

    Habe alle änderungen vorgenommen und das programm funktioniert nun.

    danke für eure hilfe



  • char h;
    

    Deklariert eine Variable "h" vom Typ char.

    char h[100];
    

    Deklariert sozusagen 100 Variablen vom Typ char.

    Nach einer if Kontrolle (nicht(!) Schleife) müssen nicht zwangsläufig Klammern folgen. Folgen auf ein if keine Klammern zählt die nächste Anweisung.

    if( a > b )
      printf("a ist groeßer als b!");
    

    funktioniert genauso wie

    if( a > b )
    {
      printf("a ist groeßer als b!");
    }
    

    Allerdings würde

    if( a > b && b > c )
      printf("a ist groeßer als b!");
      printf(" b ist groeßer als c!");
    

    dem hier entsprechen:

    if( a > b && b > c )
    {
      printf("a ist groeßer als b!");
    }
    printf(" b ist groeßer als c!");
    

    Die zweite Befehl würde so also IMMER ausgeführt.
    Jetzt weist du auch warum dein if nicht funktioniert hat:

    if( i > 0 )
      ;
    

    wäre genauso wie

    if( i > 0 )
    {
    }
    

    Das %99s bedeutet das hier ein string erwartet wird, aber maximal 99 Zeichen eingelesen werden. (Würdest du mehr einlesen, würde das ja dein "h" sprengen).

    Ich hoffe das ist soweit klar 😉 Am besten du arbeisten einfach noch ein paar tutorials durch 😃


Anmelden zum Antworten