Problem wydaje się trywialny ale walczę z nim już cały dzień.
W jednym z programów potrzebuję aby użytkownik wprowadził dwa pojedyncze, dowolne znaki z klawiatury (char).
W sumie niby proste...scanf i wydaje się po temacie. Niestety ale ta funkcja zachowuje się nie tak jak bym sobie tego życzył - delikatnie mówiąc. :-)
Jak dla mnie program wariuje.
Po uruchomieniu program pyta o pierwszy znak. Wpisuję coś z klawiatury, najczęściej 1 i wciskam enter. Teoretycznie program powinien przejść do następnej linii pytając o drugi znak. Niestety program po wprowadzeniu 1 + enter jakby czeka na coś jeszcze, wpisuję więc np. 2 + enter i wtedy pada dopiero pytanie o drugi znak. Tu już wydaję się wszystko ok bo po wprowadzeniu 3 program pyta o kolejną zmienną ( w tym programie, dla testów używam trzech zmiennych) i tu podaję 4 + oczywiście enter. Program wypisuje co mu kazałem. Okazuje się że kolejne znaki przypisane do zmiennych to 1,2 i 3. Czwórka przepadła. Podczas różnych prób miałem inne zachowania. Np. program po wprowadzeniu pierwszego znaku jakby pomijał kolejne scamfy i od razu wyświetlał wyniki. Próby typu wstawienie spacji przed %c czy położenie jedynki %1c właściwie nie wnoszą niczego konkretnego. Próbowałem też scanf_s. I tyle z grubsza. W akcie desperacji piszę tutaj z prośbą o poradę :-)
#include <stdio.h>
char tab[3];
char zmienna_1;
char zmienna_2;
char zmienna_3;
int main(void)
{
printf("Przypisz znak zmiennej_1= ");
scanf("%1c\n", &zmienna_1);
printf("Przypisz znak zmiennej_2= ");
scanf("%1c\n", &zmienna_2);
printf("Przypisz znak zmiennej_3= ");
scanf ("%1c\n", &zmienna_3);
printf("Zmienna 1= %c\n", zmienna_1);
printf("Zmienna 2= %c\n", zmienna_2);
printf("Zmienna 3= %c\n", zmienna_3);
tab[0] = zmienna_1;
tab[1] = zmienna_2;
tab[2] = zmienna_3;
printf(" Wartosc tablic 0,1,2= %c %c %c\n", tab[0], tab[1], tab[2] );
if (tab[1] == tab[2])
printf("Tab 1 i tab 2 to znaki zgodne= %c %c\n", tab[1], tab[2]);
printf("Tab 1 i tab 2 to znaki rozne= %c %c\n", tab[1], tab[2]);
if (tab[1] == '*')
printf("Tab 1 to znak gwaiazdki %c\n", tab[1]);
else
printf("Tab 1 to inny znak niz gwiazdka= %c\n", tab[1]);
return 0;
}
)