[ s1cK @ 06.11.2007. 19:47 ] @
Uzeo sam polako da ucim C iz knjige "ANSI C" autora Brian W. Kernighan i Dennis M. Ritchie, pa sam naisao na jedan deo koji mi nije jasan. interesuje me u ovom source cod-u , cemu ovo ? ( oznacio sam deo koji mi nije jasan )
Code:
#include <stdio.h>



/* cont digits,white space, others */



main()

{



    int c, i, nwhite, nother;

    int ndigit[10];

    

    nwhite = nother = 0;



    for (i = 0; i < 10; ++i)    /* Ovaj deo mi nije jasan,  */

        ndigit[i] = 0;        /* i zbog cega je on tu ?   */



    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 = %d\n", nwhite, nother);

}


Hvala unapred.
Pozdrav
s1cK
[ mjux @ 06.11.2007. 20:38 ] @
taj deo koda ti sluzi za inicijalizaciju tog niza koji imas.... inicijalizacija znaci da se na svako mesto u tom nizu upise 0 jer kad se tek oformi niz racunar obezbedi memoriju u kojoj mozda vec ima nesto upisano pa cisto da ne bi bilo zabune sta je bilo a sta nije sve vrednosti se podese na 0...:)
[ Eurora3D Team @ 07.11.2007. 22:10 ] @
Code:

for (i = 0; i < 10; ++i)    /* Ovaj deo mi nije jasan,  */

Ovo je for petlja. Izvrsava se u krug dok je uslov tacan (drugi argument i < 10)
Ova for petlja ce se izvrsiti 10 puta posto je i == 0 i uvecava se svaki put za 1 (i++)
Ako posle for linije stoji blok koda izmedju {} zagrada onda se ceo taj blok izvodi u krug, a ako nema zagrade (kao ovde) izvodi se samo sledeca linija.
Code:

        ndigit[i] = 0;        /* i zbog cega je on tu ?   */

ndigit je int niz od 10 clanova. Clanovima niza se pristupa kockastim [] zagradama. Prvi clan niza je ndigit[0] a zadnji ndigit[9] (ukupno 10)
Ovo i gore svaki put menja vrednost (od 0 do 9) tako da svakom elementu niza dajemo vrednost 0 u ovoj petlji.
Pozdrav
[ Nemanja.Ciric @ 20.11.2007. 00:23 ] @
Code:
for (i = 0; i < 10; ++i)    /* Ovaj deo mi nije jasan,  */

        ndigit[i] = 0;        /* i zbog cega je on tu ?   */


Da li te možda buni inkrement operator? U svakoj for petlji se prvo inicijalizuje privremena promenjiva (prvi izraz, u našem slučaju i se posatvi na nulu) pa se proveri logički izraz (drugi izraz, u našem slučaju, proveri se da li je i<10) pa se izvrše komande u telu petlje (u našem slučaju i-ti element niza se postavi na nulu) pa se izvrši poslednji izraz (i se poveća za jedan) pa se opet proveri logički izraz, ako je tačan, telo petlje se ponovo izvršava, ako ne, izlazi se iz petlje. Ovo si možda i znao, poenta je da se ovaj kod mogao napisati i ovako:

Code:
for (i = 0; i < 10; i++)    

        ndigit[i] = 0;        


što ti možda deluje poznatije. Razlika između i++ i ++i je da u složenim izrazima, ili lancima izraza, povećanje za jedan se izvršava na kraju (i++) odnosno na početku (++i). Pošto inkrement stoji "sam za sebe" pri kraju petlje (++i odnosno i++ nije deo ni jednog složenijeg izraza) nema veze da li piše ++i, i++, i+=1 ili i=i+1. Iz nekog razloga norma kod svih profesora, asistenata i autora knjiga je da se piše i++.

Ajd javi da li je jasno, ne bih ni ovo pisao, nego ne odgovaraš, pa ne znam da li ti je jasno posle ova dva (sada već tri) objašnjenja ili nije...