• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

scanf - niezrozumiałe zachowanie (język c)

+1 głos
43 wizyt
pytanie zadane 7 marca w C i C++ przez Waran3 Początkujący (430 p.)
edycja 7 marca przez Waran3

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;
	}

)  

komentarz 8 marca przez tkz Nałogowiec (38,400 p.)

1 odpowiedź

+1 głos
odpowiedź 8 marca przez Waran3 Początkujący (430 p.)
edycja 8 marca przez Waran3

Rozwiązaniem jest drobna zmiana w kodzie :-)

W linii ze scanf trzeba wyrzucić \n i przed %1c wstawić spację - i śmiga :-)

 

    printf("Przypisz znak zmiennej_1= ");
	scanf(" %1c", &zmienna_1);

	printf("Przypisz znak zmiennej_2= ");
	scanf(" %1c", &zmienna_2);

	printf("Przypisz znak zmiennej_3= ");
	scanf (" %1c", &zmienna_3);

Podobne pytania

0 głosów
4 odpowiedzi 1,061 wizyt
pytanie zadane 26 maja 2017 w C i C++ przez Kuba2263 Nowicjusz (200 p.)
0 głosów
1 odpowiedź 1,070 wizyt
pytanie zadane 28 marca 2017 w C i C++ przez Kamil Duljas Użytkownik (990 p.)
0 głosów
2 odpowiedzi 263 wizyt
pytanie zadane 10 grudnia 2016 w C i C++ przez Jan Dobrakowski Użytkownik (580 p.)
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

84,132 zapytań

132,900 odpowiedzi

293,920 komentarzy

55,556 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...