arrays - Check whether the input is digit or not in C programming -


i reading book: the c programming language - kernighan , ritchie (second edition) , 1 of examples having trouble understanding how check whether input digit or not. example on page 22, explaining under array chapter.

below example.

#include <stdio.h>   /* count digits, white space, others */   main()  {    int c, i, nwhite, nother;    int ndigit[10];     nwhite = nother = 0;     (i = 0; < 10; ++i)    {        ndigit[i] = 0;    }     while ((c = getchar()) != eof)    {      if (c >= '0' && c <= '9')      {          ++ndigit[c-'0'];      }      else if (c == ' ' || c == '\n' || c == '\t')      {          ++nwhite;      }      else      {          ++nother;      }     printf("digits =");     (i = 0; < 10; ++i)    {       printf(" %d", ndigit[i]);    }     printf(", white space = %d, other = %d\n",nwhite, nother);  } 

for example, confused me author mentioned line ++ndigit[c-'0'] checks whether input character in c digit or not. however, believe if statement ( if (c>= '0' && c<= '9') ) necessary, , check if c digit or not. plus, not understand why [c-'0'] check input(c) digit or not while input variable (c) subtracted string-casting ('0').

any suggestions/explanations appreciated.

thanks in advance :)

the if statement checks whether character digit, , ++ndigit[c-'0'] statement updates count digit. when c character between '0' , '9', c-'0' number between 0 , 9. put way, ascii value '0' 48 decimal, '1' 49, '2' 50, etc. c-'0' same c-48, , converts 48,49,50,... 0,1,2...

one way improve understanding add printf code, e.g. replace

if (c >= '0' && c <= '9')      ++ndigit[c-'0']; 

with

if (c >= '0' && c <= '9') {     ++ndigit[c-'0'];     printf( "is digit '%c'   ascii=%d   array_index=%d\n", c, c, c-'0' ); } 

Comments

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -