Witam,
z pomocą książki Język C Briana Kernighan'a oraz Dennisa Ritchie napisałem poniższy program:
#include<stdio.h>
void main(void){
int c, numWhite, numOther;
int tab[10];
for(int i = 0; i < 10; i++){
tab[i] = 0;
}
while( (c = getchar()) != EOF){
if( c >= '0' && c <='9'){
tab[c-'0'] += 1;
}
else if ( c == ' ' || c == '\n' || c == '\t'){
numWhite++;
}
else{
numOther++;
}
}
printf("cyfry = { ");
for(int i = 0; i < 10; i++){
printf("%d, ", tab[i]);
}
printf("}, białe znaki = %d, inne = %d\n", numWhite, numOther);
}
Problem pierwszy polega na tym, iż nie rozumiem dlaczego program działa tylko, gdy w 12. linijce jest tab[ c - '0' ]
. Początkowo wydawało mi się, że wystarczy tab[c]
, jednak w książce jest tab[ c - '0' ]
i faktycznie, tylko ta wersja działa. Nie mam pojęcia dlaczego. Czy ktoś mógłby przystępnie wytłumaczyć co robi ów - '0'
?
Problem drugi znajduje się w linijce 11. - if( c >= '0' && c <='9'){
- dlaczego liczby muszą być ujęte w apostrofy, przecież zmienna c
jest typu int
?
Z góry dziękuję