Zapętlone if

0

Pisze sobie taki prosty kalkulatorek w ANSI C i mam pewien problem, a mianowicie lekko mi się zapętla i nie wiem jak temu zaradzić. Wszystko dzieje sie w funkcji dalej, gdzie po wybraniu opcji t obraz mrugnie tylko i nadal jest to samo pytanie, a powinno przejść do pytania drugiego (Czy na tych samych liczbach). Przy wybieraniu opcji n ładnie przechodzi i zamyka program. Dodam jeszcze, że po wpisaniu tt przechodzi dalej, wyświetla drugie pytanie, ale tak jakby z automatyczną odpowiedzią i dalszą instrukcją (taką jak w przypadku pozytywnej odpowiedzi). Kompletnie nie wiem jak sobie z tym poradzić...

#include <stdio.h>
#include <conio.h>

      int a,b, operacja;
      int warunek1, warunek;
      char decyzja, decyzja2;
      
      void menu ()
      {
           printf("\tTwoje liczby a= %d\tb= %d\n\nTypy operacji: \n1. Dodawanie\n2. Odejmowanie\n3. Mnozenie \n4. Dzielenie\n0. Zakonczenie dzialania programu\n\nOperacja: \t", a, b);              
           scanf("%d", &operacja);
           }
      
      int dodawanie (int x, int y)
      {
          int suma;
          suma = x+y;
          return suma;
          }
          
      int odejmowanie (int x, int y)
      {
          int roznica;
          roznica = x-y;
          return roznica;
          }
          
      int mnozenie (int x, int y)
      {
          int iloczyn;
          iloczyn = x*y;
          return iloczyn;
          }
          
      int dzielenie (int x, int y)
      {
          int iloraz;
          iloraz = x/y;
          return iloraz;
          }
          
      void dalej ()
      {
           printf("\n\nCzy chcesz kontynuowac? (t/n)");
           decyzja = getchar();
           if(decyzja == 't'){
                   system("cls");
                   printf("\n\n\nNa tych samych liczbach? (t/n)");
                   decyzja2 = getchar();
                   if(decyzja2 == 't'){
                              menu();
                              }
                              else if(decyzja2 == 'n'){
                                   }   
                   }
                   else if(decyzja == 'n'){
                   warunek = 0;
                   warunek1 = 0;
                   system("cls");
                   printf("Milego dnia...");
                   }
           }

int main()
{
      printf(".....:::::KALKULATOR:::::.....\n \n");
      
      warunek1 = 1;
      warunek = 1;
      
      while(warunek1 == 1){
      printf("Podaj pierwsza liczbe: ");
      scanf("%d", &a);
      
      printf("Podaj druga liczbe: ");
      scanf("%d", &b);
      
      system("cls");
      menu ();

      while(warunek == 1){
      
      switch(operacja){
                       case 1: system("cls");
                               printf("\nSuma liczb %d i %d wynosi: %d", a, b, dodawanie (a, b));
                               dalej ();
                               break;         
                       
                       case 2: system("cls");
                               printf("\nRoznica liczb %d i %d wynosi: %d", a, b, odejmowanie (a, b));
                               dalej ();
                               break;
                       
                       case 3: system("cls");
                               printf("\nIloczyn liczb %d i %d wynosi: %d", a, b, mnozenie( a, b));
                               dalej ();
                               break;
                       
                       case 4: system("cls");
                               printf("\nIloraz liczb %d i %d wynosi: %d", a, b, dzielenie (a, b));
                               dalej ();
                               break;
                       
                       case 0: system("cls");
                               printf("Milego dnia...");
                               warunek = 0;
                               warunek1 = 0;
                               break;
                       
                       default: system("cls");
                                printf("Nie ma takiej operacji, podaj prawidlowy typ operacji jaka ma zostac wykonana!\n\n");
                                menu ();
                                warunek = 1;
                                warunek1 = 0;
                                break;
                       }
                       }
                       }
               
      getch();                   
      return 0; 
}

1

Ponieważ getchar() czyta tylko jeden znak ze strumienia, pozostawiwszy tam opuszczenie linii.

fflush(stdin);

po każdym getchar'ze rozwiazuje problem.

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