scanf("%c", ...), a ENTER

0

Przy rozwiązywaniu zadań natknąłem się na pewien problem, np. mam taki kod:


#include <cstdio>

//----------------------------------------------------------------------

int main()
{
	int t;
	char znak;
	
	scanf("%d", &t);
	
	while(t--)
	{
		scanf("%c", &znak);
	}
	
	return 0;
}

//----------------------------------------------------------------------

Gdy po wpisaniu liczby "t" nacisnę "ENTER", to zostanie on potraktowany jako wczytanie zmiennej "znak" w pierwszym obiegu pętli. Przy każdym zadaniu z takim wczytywanie, musiałem zmieniać kod na taki:


#include <cstdio>

//----------------------------------------------------------------------

int main()
{
	int t;
	char znak;
	
	scanf("%d", &t);
	
	scanf("%d", &znak);//ENTER
	
	while(t--)
	{
		scanf("%c", &znak);
	}
	
	return 0;
}

//----------------------------------------------------------------------

Czy mógłby mi któs wytłumaczyć dlaczego tak się dzieje i jak można to ominąć?

0

Spróbuj tak:
scanf("%d\n", &t);

0

ja w takich chwilach po prostu przed wczytaniem znaku stosuje getchar() :) a dzieję się tak bo liczbe scanf wczytuje ci dopóki znak jest w przedziale >47 i <58 więc tak jakby kursor zostaje na enterze ( \n) a jak wczytujesz znak to wczytujesz wszystko więc pierwsze co to znak nowej lini

0

scanf(" %c", &znak);
zamiast
scanf("%c", &znak);

0

ew. fflush(stdin) - na niektorych platformach dziala, po prostu wyrzucajac wszystko co w buforze wejsciowym.. ale serio, nie polecam, gdyz czasem robi problemy.. podaje jako ciekawostke

0

Zabezpieczenie przed wpisywaniem liter
sposoby na usuwanie znaków z bufora ;)

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