Anfängerfrage: Problem mit scanf() und zwei char!



  • Hi!

    Ich fange gerade an C zu lernen und stehe schon am Anfang vor einem Problem!
    Ich habe ein wenig Erfahrung mit c++!
    Also zum Problem:

    Ich möchte ein ganz einfaches Programm schreiben welches nacheinander zwei char einliest und dann ausgibt:

    int main()
    {
      char letter_a, letter_b;
    
      printf("Please enter letter A: ");
      scanf("%c", &letter_a);
      printf("%c\n", letter_a);
      printf("Please enter letter B: ");
      scanf("%c", &letter_b);
      printf("%c\n", letter_b); 
    
    return 0;
    }
    

    So, wenn ich diesen Code kompiliere, dann fragt er mich brav nach A ab, wartet aber auf keine weitere Eingabe mehr:

    Please enter letter A: d
    d
    Please enter letter B:
    

    Das letzte printf() wird auch ausgeführt, jedch wird das zweite scanf() einfach übersprungen!
    P.s.: ich kompiliere mit gcc 4.6.1!

    mfg trunksen



  • Führe mal folgendes Programm aus:

    int main()
    {
      char letter_a, letter_b;
    
      printf("Please enter letter A: ");
      scanf("%c", &letter_a);
      printf("A: '%c'\n", letter_a);
      printf("Please enter letter B: ");
      scanf("%c", &letter_b);
      printf("\nB: '%c'\n", letter_b); 
      return 0;
    }
    

    Das dürfte das Problem klar machen.

    seldon hat das Phänomen gestern recht ausführlich erklärt, inklusive Lösung: http://www.c-plusplus.net/forum/p2131935#2131935



  • Vielen Dank, der Link hat das Problem verständlicher gemacht!
    Das Problem liegt dann ja sehr viel tiefer als ich gedacht habe 😉 !
    Leider macht dein Programm aber auch das gleiche!

    mfg trunksen



  • trunksen schrieb:

    Leider macht dein Programm aber auch das gleiche!

    Es sollte nur zeigen, dass die Eingabe von letter_b nicht übersprungen wird, sondern dass ein Newline eingelesen wurde (daher die Apostrophe drum, damit man es sieht).

    Eine echte Lösung steht im Link, wie du vielleicht schon gemerkt hast.



  • Achso, das habe ich dann falsch verstanden!

    Ja mit der Methode alles bis zum Zeilenumbruch zu ignorieren funktioniert es super!

    danke!


Log in to reply