jeudi 23 juin 2016

K&R 1.6 Array. Not understanding the code

I start reading the book K&R The C programmming ( 2nd edition). And I got stuck on the 1.6 Array; I just can't seem to figure out what the code does (even tho it says it counts digits, white spaces and others!). Here is the code:

#include <stdio.h>
/* count digits, white space, others */
main()
{
    int c, i, nwhite, nother;
    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 == 'n' || c == 't')
            ++nwhite;
        else
            ++nother;
    printf("digits =");
    for (i = 0; i < 10; ++i)
        printf(" %d", ndigit[i]);
    printf(", white space = %d, other = %dn",nwhite, nother);
}

So first it defines Integers, ( c,i,nwhite,nother); After that it creates an array of 10 digits, ( 0 -9 ) After that it sets nwhite and nother to 0.

the for loops set I to 0, i < 10 means if its lower, add i = i + 1. ndigit[i] = 0? I dont quite understand it, isnt i already is 0?

while ((c = getchar() != EOF) means What ever the input is and isnt at the end of the file?.
After that part I kinda got lost and I'm not sure what

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

Does at all.

And I don't quite understand why the for (i = 0; i < 10 ; +=i ) is repeated . I do understand English but some expensive use of words will confuse me. So if you dont mind, please keep it basic for me. I really hope there is someone out there who can help me understanding this code 100%. Because after all, who wants a programmer who cant even understand the code? :)

Aucun commentaire:

Enregistrer un commentaire