if anweisungen und fehler durch printf



  • So ich bekomm das mit der if anweisung nicht hin, selbst wenn ich 1 eingabe kommt immer else.

    2. Problem
    Bei einer printf anweisung beendet es sich mit Fehlermeldung "Programm funktioniert nicht mehr"

    #include <stdio.h>
    
    int main()
    { system("color 0A");
      printf("Wilkommen in der Matrix!");
    
      do {
      fflush(stdin);
      char eingabe;
      printf("\nWie lautet ihre Eingabe?\n"); 
      scanf("&s", &eingabe);
    
      if (eingabe == 1) /* ist das so korrekt? funktioniert auf jeden fall nicht */
      {
             printf("if") ;
    
    }
    
      else { printf("else");
    }
    
     printf("Letzte Eingabe: %s", eingabe );  /* Hier kommt fehlermeldung "programm funktioniert nicht mehr und wird beendet" */
     system("pause");
    }
    while ( 1>0 );
    
      return 0;
    }
    


  • In C gibt es einen sehr großen Unterschied zwischen einzelnen Zeichen (char) und Zeichenketten (char[]).

    Mit %s liest du bei scanf Zeichenkette ein, bzw. gibst sie bei printf auch aus.

    Was willst du denn eingeben/einlesen?
    Eine Zahl oder ein Zeichen?

    Das if (eingabe == 1) ist in diesem Fall korrekt, da eingabe ein char ist.

    Und Formatspecifier fangen mit % an.



  • #include <stdio.h>
    
    int main()
    { system("color 0A");
      printf("Wilkommen in der Matrix!"); // fehlt da nicht ein "l"?
    
      do {
      fflush(stdin); // nutzt du den Compiler bei dem das in der Doku steht? sonst undefinierte Ergebnisse!
      char eingabe;
      printf("\nWie lautet ihre Eingabe?\n");
      scanf("&s", &eingabe); // Du gibst eine Ziffer ein? Schau: "scanf format"
    
      if (eingabe == 1) /* ist das so korrekt? funktioniert auf jeden fall nicht */
      {
             printf("if") ;
    
    }
    
      else { printf("else");
    }
    
     printf("Letzte Eingabe: %s", eingabe );  /* Hier kommt fehlermeldung "programm funktioniert nicht mehr und wird beendet" */
     system("pause");
    }
    while ( 1>0 );
    
      return 0;
    }
    

    Schau dir diesen Beitrag auch gründlich an:
    http://www.c-plusplus.net/forum/294013
    Da sind auch noch Infos zu scanf().

    Mit dem Formatieren des Quelltextes musst du noch ein wenig üben 😃

    MfG f.-th.



  • Warum führt Zeile 22 zu einem Absturz des Programms?



  • arcanis schrieb:

    Warum führt Zeile 22 zu einem Absturz des Programms?

    Weil printf bei %s einen Zeiger auf eine Nullterminierte Zeichenkette erwartet (char*) du aber ein char übergibst.

    Ändere mal folgende Zeilen, die findest du schon. Alle drei.

    int eingabe;
    ...
      scanf("%d", &eingabe); 
    ...
      printf("Letzte Eingabe: %d", eingabe );
    


  • ich möchte aber auch Buchstaben eingeben können



  • Dann nimm

    int eingabe;
    ...
      scanf("%c", &eingabe);
    ...
      if (eingabe == '1')
    ...
      printf("Letzte Eingabe: %c", eingabe );
    

    Und lies auch mal bei http://www.c-plusplus.net/forum/294013 rein.

    Nimm dein/ein C-Tutorial und mach dir den Unterschied zwischen 1 , '1' und "1" klar.

    1 ist eine Ganzzahl wie auch -12 oder 4711.
    '1' ist ein Zeichen wie auch 'A' oder '+' oder '\n'.
    "1" ist eine Zeichenkette wie auch "Hallo Welt!" oder "Lies ein C-Buch".

    Variablentypen für Ganzzahlen und Zeichen sind int, char, long oder short.

    Zeichenketten werden als Array von char angegeben und ganz anders behandelt.



  • ich möchte eine zeichenkette einlesen und auch wieder ausgeben.
    komme aber nicht drauf wie das zu bewerkstelligen ist

    #include <stdio.h>
    
    int main()
    {
        int eingabe;
        printf("Wie lautet ihre Eingabe?\n");
        scanf ( "%s" , &eingabe );
        printf ("\n%s", eingabe);
        system("pause");    
    
      return 0;
    }
    

    printf ("\n%s", eingabe);

    führt immer zum absturz
    mit zahlen (also wenn ich %s mit %d ersetze) klappt alles



  • Wenn du eine Zeichenkette (mit %s) einlesen willst, musst du auch Speicherplatz für eine Zeichenkette bereitstellen.

    #include <stdio.h>
    
    int main()
    {
        char eingabe[80];  // Platz für 79 Zeichen + '\0'
        printf("Wie lautet ihre Eingabe?\n");
        scanf ( "%79s", eingabe); // Dass da kein & steht ist hier richtig
        printf ("\n%s", eingabe);
        system("pause");    
    
      return 0;
    }
    


  • thx
    klappt


Log in to reply