Scanf() i iteracja

Scanf() i iteracja
CO
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 10 lat
  • Postów:31
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)?

Kopiuj
#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ć?)

edytowany 5x, ostatnio: compl
Endrju
  • Rejestracja:około 22 lata
  • Ostatnio:ponad rok
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/


"(...) otherwise, the behavior is undefined".
edytowany 1x, ostatnio: Endrju
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:3 minuty
0

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

Kopiuj
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:

Kopiuj
a b c d e
1 2 3 4 5

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 2x, ostatnio: MarekR22

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.