Scanf() i iteracja

0

Witam.
Naprawdę bardzo mnie zastanawia fakt, dlaczego poniższy kod nie chcę przyjąc danych do drugiej tablicy (do pierwszej tylko pierwsze 3 elementy)?

#include <cstdio>

int main()
{
char tab[5];
int tab2[5];
int i,t,b;
scanf("%d %d", &t,&b);
for(i = 0; i < 5; i++)
{
scanf("%c",&tab[i]);
}

for(i = 0; i < 5; i++)
{
scanf("%d",&tab2[i]);
}
 
return 0;
}

Może jakieś przepełnienia bufra, czy coś?
Bardzo mnie to ciekawi. Dzięki za wszelkie odpowiedzi.

EDIT: Już wiem jak powinno być poprawnie. Należy napisać dwa scanfy obok siebie w pierwszej pętli. Proszę tylko teraz o jakieś ładne wytłumaczenie, czemu tak, a nie inaczej ;) (trzeba jakiś śmieciowy bufor zapełnić?)

0

Tutaj: scanf("%c",&tab[i]); wstaw spację w format: "%c ". Spowoduje to, że białe znaki rozdzielające poszczególne znaki zostaną wczytane i zignorowane. Teraz wczytują się wszystkie znaki, czyli też spacje albo znaki nowej linii i trafiają do tablicy.

http://www.cplusplus.com/reference/cstdio/scanf/

0

Nie pokazałeś jakie są dane wejściowe. patrząc na twój "EDIT" najwyraźniej masz dane które się przeplatają:

a 1
b 2
c 3
d 4
e 5

natomiast kod, który napisałeś pozwala na wczytanie danych, które są rozdzielone na dwa osobne ciągi:

a b c d e
1 2 3 4 5

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