Anfängerfrage zu printf und scanf!



  • Hallo!

    Ich habe gerade angefangen mich in C einzuarbeiten (wegen der Uni) und habe bisher nur Erfahrungen in Java gesammelt... Nun habe ich ein großes Verständnisproblem nachdem ich nur eine Kleinigkeit ausprobieren wollte... Hier meine Problembeschreibung:

    #include <stdio.h>
    
    int main() {
      unsigned char a, b;
      printf("\nZeichen 1: ");
      scanf("%c", &a);
      printf("\nZeichen 2: ");
      scanf("%c", &b);
      printf("\nAusgabe:a =  %c, b = %c\n", a, b);
    }
    

    Nehmen wir diesen Code als Bsp... Warum um Himmels Willen wird meine 2. scanf Anweisung übersprungen ? 😕
    Wenn ich nach der ersten Aufforderung etwas einzutippen, gleich zwei Zeichen eingebe (Bsp: "ab") wird a in a gespeichert und b in b... aber ich will ja das b erst nach der Ausgabe: "Zeichen 2: " eingelesen wird... ?!
    Ändere ich in der zweiten scanf den Formatparameter auf %d wird es nicht übersprungen, also hängt es ja anscheinend damit zusammen, dass zweimal %c so kurz aufeinander folgt ? Auch lösen konnte ich das Problem wenn ich in der 2. scanf statt nur einem %c 2 nehme, also: scanf("%c%c", &b. &b); aber das ist natürlich keine Lösung hab ich nur beim rumprobieren rausgefunden... 😃

    Habe leider nichts finden können was mir dieses Problem erläutert... Ich möchte mich schon mal entschuldigen falls diese Frage schon mehrmals beantwortet wurde und würde mich auch sehr über einen hilfreichen Link oder eine kurze Erläuterung darüber freuen!

    Falls das relevant ist: Habe Ubuntu Hardy 8.04, kompiliere mit gcc.

    Viele Grüße,

    Marco



  • Das liegt daran, dass auch dein ENTER als Zeichen interpretiert wird.

    Um diesen Effekt zu vermeiden, hilft eine einfache Schleife die dafür sorgt dass das Zeichen wieder weg ist:

    while(getchar() != '\n');
    


  • Vielen Dank! Hab das jetzt mal so abgeändert und für eine fehlerfreie Eingabe funktioniert das ja schon mal 😉

    So würde es richtig aussehen: (nach zahlreichen gescheiterten Versuchen)

    #include <stdio.h>
    
    int main() {
      char a, b;
      printf("\nZahl 1: ");
      do {
      scanf("%c", &a);
      } while(getchar() != '\n');
      printf("\nZahl 2: ");
      do {
      scanf("%c", &b);
      } while(getchar() != '\n');
      printf("\nAusgabe:a =  %c, b = %c\n", a, b);
    }
    

    Viele Grüße,

    Marco


Anmelden zum Antworten