Switch-case i scanf() w pętli while

0

Witam,

Czy mógłby mi ktoś wytłumaczyć zachowanie scanf() w takim kodzie:

#include <stdio.h>


int x,y,t;
char z;
t=0;
void main()
{


    while (t<4)
    {
    scanf("%c %d %d",&z,&x,&y);
    printf("Wartosc Z %c\n",z);
    switch(z)
    {
    case '+':
        printf("Kejs dziala\n");
        break;
    default:
        break;
    }
    t++;
    printf("Wartość t %d \n",t);
    }
    printf("Jestem juz tutaj");
}
 

Generalnie pierwszy obieg pętli działa poprawnie, potem niestety scanf() nie zapisuje pod zmienna z chara, wynik jest jak poniżej:

+ 1 2
Wartosc Z +
Kejs działa
Wartosc t 1
+ 7 8
Wartosc Z

Wartosc t 2
Wartosc Z
Wartosc t 3
+ 5 6
Wartosc Z

Wartosc t 4
Jestem juz tutaj

Zupełnie inaczej zachowuje się gdy zamiast '+' w case znajdzie się litera , np. 'a', wtedy:

a 1 2
Wartosc Z a
Kejs dziala
Wartosc t 1
a 2 3
Wartosc Z

Wartosc t 2
Wartosc Z a
Kejs dziala
Wartosc t 3
a 5 6
Wartosc Z

Wartosc t 4
Jestem juz tutaj

Wygląda jakby zapisywał znak nowej linii, ale dlaczego ?

Z gory dzieki za pomoc

0

Żeby scanf ignorował białe znaki musisz zmienić wzorzec na taki, ze spacją:

scanf("%c %d %d ",&z,&x,&y);

wtedy będzie działać dobrze.

Poza tym: nie używaj zmiennych globalnych i raczej pisz int main() i na końcu return 0;.

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