Wo ist der Unterschied in den Codes?



  • Hallo ihr Lieben,
    ich habe folgende Aufgabe:
    "Lies mit scanf ein Wort, ein Zeichen und eine Fließkommazahl ein und gibt ihr die Inhalte mit printf wieder aus."

    Das ist Code 1:

    #include<stdio.h>
    
    int main()
    {
        char wort[20];
        char c;
        double d;
    
        printf("Wort: ");
        scanf("%s", wort); 
        
        printf("Zeichen: ");
        scanf("%c", &c);
        
        printf("Fliesskommazahl: ");
        scanf("%lf", &d);
        
        printf("Wort: %s\nZeichen: %c\nFliesskommazahl: %lf\n", wort, c, d);
    
    return 0;
    }
    

    Das ist Code 2:

    #include <stdio.h>
     
    int main(void) 
    {
      char wort[30];
      char c;
      float x;
      printf("Wort , Zeichen  und  Zahl  eingeben: ");
      scanf("%s %c %f", wort, & c, & x);
      printf(" Eingegeben  wurde: %s, %c, %f\n", wort, c, x);
      return 0;
    }
    

    Code 1 funzt NICHT, Code 2 schon.
    Warum klappt der erste Code nicht?

    Vielen Dank für ejden Hinweis.

    Liebe Grüße
    Hawaiihemd



  • @Hawaiihemd Code 2 funktioniert (so wie du wünscht), weil im Formatstring von sscanf vor dem %c ein Leerzeichen ist.

    Wenn du im Code 1 beim Zeichen ein " %c" (Leerzeichen vor dem % ) schreibst, geht der auch.

    Das Leerzeichen im Formatstring überliest Whitespace (Leerzeichen, Tabulatoren, Zeilenvorschub).
    %s, %f, %d (und andere Intformate) machen das automatisch.
    %c nicht, du könntest ja das '\n' von der Enter-Taste lesen wollen.

    Im Code 1 kannst du für das Zeichen mal eine Ziffer nehmen, dann läuft das Programm weiter.



  • @DirkB Okay, mit Leerzeichen geht es tatsächlich. Aber die letzte Zeile wird trotzdem nicht ausgegeben.

       printf("Wort: %s\nZeichen: %c\nFliesskommazahl: %lf\n", wort, c, d);
    

    Diese Zeile scheint er immer noch zu ignorieren...



  • @Hawaiihemd Das kann auch an falschen Eingaben oder nicht aktuellem Programm (exe passt nicht zum Code) liegen.


Anmelden zum Antworten