Scanf w warunku if (język C)

0

Witam wszystkich!

Mój problem wygląda następująco:

Celem tego fragmentu programu jest umożliwienie wprowadzania liczb do kalkulatora. Przy wpisaniu cyfry 0 powinien się wyświetlić komunikat: "Cyfra 0 czy koniec wprowadzania liczb? (c / k)". Następnie powinno wyskoczyć pole do wpisania odpowiedzi, lecz tak się nie dzieje. Po ww. komunikacie wychodzi z if'a i wraca do początku pętli while.

Oto kod:

int main(){
  int liczba;
  char wybor;
  int koniec=0;
  printf("Tutaj wpisz liczby, na których chcesz wykonać operacje: ");
  while (koniec!=1)
    {
      printf("początek\n");
      scanf("%d", &liczba);
      if (liczba == 0)
        {
          printf("Cyfra 0 czy koniec wprowadzania liczb? (c / k)\n");
          scanf("%c", &wybor);
          printf("po scanfie\n");
          switch(wybor){
          case 'c':
            printf("\ncyfra 0\n");
            break;
          case 'k':
            printf("\nPrzechodzimy do znakow i operacji na stosie (p) czy koniec programu (q)? (p / q)\n");
            scanf("%c", &wybor);
            switch(wybor){
            case 'p':
              koniec=1;
              break;
            case 'q':
              return 0;
            }
            break;
          }
        }
    }
}

Czy ma ktoś pomysł jak rozwiązać ten problem? Za wszelką pomoc z góry dziękuję.

0

przetestuj sobie najprostszy kod:

#include <cstdio>

int main()
{
  int d;
  char c;
  scanf("%d",&d); // wprowadz liczbe po uruchomieniu
  scanf("%c",&c); // sprawdz co sie stanie jak program dojedzie do tej linii
  return 0;
}

wyświetl sobie znak c (printf("%d",(int)c)) i sprawdź sobie co to za znak. podobny problem na pewno występuje u Ciebie (nie wiem czy jest jedyny)
takie zachowanie możesz wyeliminować wstawiając w scanfie przed %c dowolny biały znak np.:

scanf(" %c",&c); // zwroc uwage na spacje
0

Tak, chodziło o to! Rzeczywiście, nie zwróciłem uwagi na to, że chary inaczej zapisuje się w scanfie. Wielkie dzięki i pozdrawiam! :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1