Dzień dobry,
Podczas dzisiejszej nauki napotkałem pewien kod którego działania nie mogę sobie uzmysłowić. Mamy pewną liczbę całkowitą zadeklarowaną:
int m=4;
Oraz pewną tablicę wskaźników typu char:
char *ciag="S1,Z4 grupy T1-T6, %s, %s.\n";
A pętla taka jak poniżej, zlicza liczbę liter, cyfer i wyrazów w tym łańcuchu:
while((c=*(ciag+++m))!='\0')
if(c>='0'&&c<='9')cyf++;
else if(c>='A'&&c<='Z'||c>'a'&&c<='z')lit++;
else ++poz;
Po wywołaniu wyników funkcją printf():
printf("Liczba: cyfr=%d, liter=%d, innych znakow=%d\n",cyf,lit,poz);
Otrzymuję całkowicie niezrozumiałe wyniki:
Liczba: cyfr=7, liter=13, innych znakow=15
Dlaczego te wyniki są tak dziwne? Mnie wydawało się, że liczymy od piątego znaku łańcucha do końca co daje inne wyniki. Nawet gdybyśmy liczyli od początku to tych poszczególnych znaków w metodzie ręcznej wychodzi mniej niż w wyniku programu. Algorytm jest napisany na 100% dobrze, bo to fragment kolokwium przykładowego, gdzie zdający ma być kompilatorem i dać wynik. Proszę bardzo o wytłumaczenie, ponieważ to częsty przykład u mojego wykładowcy!