c - Topic 1.6 by Kernighan and Ritchie -
i going through book "the c programming language" kernighan , ritchie , stuck @ topic.
topic number 1.6 talks arrays. in book, have included program counts digits, white spaces , other characters. program goes this:
#include <stdio.h> main(){ int c,i,nother,nwhite; int ndigit[10]; nwhite=nother=0; for(i=0;i<10;++i) ndigit[i]=0; while((c=getchar())!=eof) if (c>='0' && c<='9') ++ndigit[c-'0']; else if (c==' '|| c=='\t'||c=='\n') ++nwhite; else ++nother; printf("digits:"); for(i=0; i<10;++i) printf(" %d",ndigit[i]); printf(", white space = %d, other = %d\n", nwhite, nother); } first, don't understand purpose of first loop :
for(i=0;i<10;++i) ndigit[i]=0; and secondly, can't understand logic behind part of while loop:
if (c>='0' && c<='9') ++ndigit[c-'0']; i need explain me logic behind program can move further c programming.
thanks help!
this loop
for(i=0;i<10;++i) ndigit[i]=0; is used set elements of array ndigit 0. array count numbers of eneterd digits.
instead of loop initialize elements of array 0 when declared.
int ndigit[10] = { 0 }; as statement
if (c>='0' && c<='9') ++ndigit[c-'0']; then if entered char digit c>='0' && c<='9' expression c-'0' gives integer value of digit. characters correspond character constant '0' - '9' internally in computer memory represented ascii or other coding scheme codes. example cgaracter '0' in ascii has internal code 48, character '1' - 49, character '2' - 50 , on. example in ebcdic cgaracter '0' has code 240, character '1' - 241 , on.
the c standard guarantees digits follow each other.
so if variable c keeps digit expression c - '0' gives number 0 (if c keeps '0' ) 9 (if c keeps character '9' ).
this value (from 0 9) used index in array ndigit.
for example let assume c keeps character '6' . c - '0' equal integer number 6. ndigit[6] increased
++ndigit[c-'0'] this element of array index 6 counts how many times character '6' entered.
Comments
Post a Comment