Instrukcja Switch i pętla while. Problem z kolejnym wykonaniem.

0

Treść zadania 1: Wczytaj z klawiatury znak reprezentujący jeden z dwuargumentowych operatorów arytmetycznych oper (+ - * / %), a następnie dwie liczby całkowite a i b. Wypisz wynik operacji a oper b. W przypadku, gdy znak nie reprezentuje operatora arytmetycznego, zgłoś komunikat "Błędny operator". Sprawdź także, czy w przypadku operatorów / i % nie zachodzi dzielenie przez 0, jeśli tak wypisz odpowiedni komunikat. Wskazówka zastosuj instrukcje switch i if. Problem mam z zadaniem drugim.

#include <stdio.h>

int main()
{
    char oper;
    int a, b;

    printf("Wybierz operator +-*/% lub nacisn q, aby zakonczyc: ");
    scanf("%c", &oper);
    printf("Podaj dwie liczby: ");
    scanf("%d%d", &a, &b);
    switch(oper)
    {
        case '+': printf("%d+%d=%d",a,b,a+b);
            break;
        case '-': printf("%d-%d=%d",a,b,a-b);
            break;
        case '*': printf("%d*%d=%d",a,b,a*b);
            break;
        case '/':
        {
            if(b!=0)
                printf("%d/%d=%d",a,b,a/b);
            else
                printf("Nie mozna dzielić przez zero");
        }
            break;
        case '%':
        {
            if(b!=0)
                printf("%d%c%d=%d",a,37,b,a%b);
            else
                printf("Nie mozna dzielić przez zero");
        }
            break;
        default: printf("Bledny operator");

    }

}
 

Treść zadania 2: Zmodyfikuj program 1 tak, aby działał w pętli obliczając wyniki operacji dla kolejnych par liczb, dopóki użytkownik zamiast znaku oper wprowadzi znak q. Wskazówka: zastosuj instrukcję while. Do wczytania oper użyj getch().

Włączam program podaje +, potem na przykład 6 i 2. Program wyświetla wynik. I potem od razu przechodzi do podawania liczb, nie można podać operatora i z tego powodu potem wyświetli się komunikat błędny operator.

 
#include <stdio.h>

int main()
{
    char oper;
    int a, b;

    while(oper!='q')
    {
        printf("\nWybierz operator + - * / %c lub nacisn q, aby zakonczyc: ",37);
        scanf("%c", &oper);
        printf("\nPodaj dwie liczby: ");
        scanf("%d%d", &a, &b);
        switch(oper)
        {
            case '+': printf("%d+%d=%d",a,b,a+b);
                break;
            case '-': printf("%d-%d=%d",a,b,a-b);
                break;
            case '*': printf("%d*%d=%d",a,b,a*b);
                break;
            case '/':
            {
                if(b!=0)
                    printf("%d/%d=%d",a,b,a/b);
                else
                    printf("Nie mozna dzielić przez zero");
            }
                break;
            case '%':
            {
                if(b!=0)
                    printf("%d%c%d=%d",a,37,b,a%b);
                else
                    printf("Nie mozna dzielić przez zero");
            }
            case 'q': break;
                break;
            default: printf("Bledny operator");
        }
    }
}
0

scanf pobiera liczby od użytkownika, np. podajesz 6 i wciskasz ENTER. Do zmiennej zapisze się wartość 6, ale w buforze zostanie jeszcze ten ENTER. Przy kolejnym scanf pobierane jest to co z bufora, czyli pusty enter i tak to działa :)

Użyj fflush(stdin).

0

To może dodatkowy scanf? zczyta tego enter-a i będzie po problemie.

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