Keresés

Új hozzászólás Aktív témák

  • dudika10

    veterán

    válasz Geresics #3889 üzenetére

    #include <stdio.h>
    #include <string.h>

    void beolvas(char * szoveg)
    {
    printf("Adjon meg egy max. 70 karakter hosszu szoveget, majd usson ENTER-t!\n");
    gets(szoveg);
    return;
    }
    int szamlalas(char *szoveg)
    {
    int db=0;
    int i=0;
    while (szoveg[i]!='\0' && szoveg[i]!='.')
    {
    if (szoveg[i]==' ')
    db++;
    i++;
    }
    return db;
    }


    int main()
    {
    char szoveg[71];
    int db;
    beolvas(szoveg);
    db=szamlalas(szoveg);
    printf("A szoveg: %s, szavak szama: %d\n", szoveg, db);
    return 0;
    }

    Így jó.
    A while ciklusod végtelenciklusba kerülne, nem logikai vagy, hanem és kapcsolat kell. Ha bármelyik megtörténik egyből ki kell lépni.
    Láthatod azt is, hogy sztringet hogy kell átadni a függvénynek, és azt is, hogy a vissszatérési értéket hogyan kell használni.
    Felhívnám a figyelmed az int db=0; és int i=0; sorokra. A deklarált változók memóriaszemetet tartalmaznak mindaddig, amíg értéket nem adsz nekik. Lehet, hogy az i-ben például a 2341 volt tárolva pont, és akkor úgy kezded, hogy a 71 lefoglalt bájtodból a 2341-ediket akarod olvasni, ahol lehet, hogy éppen az operációsrendszer dolgozik. Ezt nem szabad, ezért a fordító figyelmeztet, hogy adj értéket használat előtt.

    Remélem senki nem fogja leharapni ezért a fejem, de a BME VIK villamosmérnök hallgatók első féléves tárgya a C, és ebben a félévben nagyszerű diasort állítottak össze az oktatók.
    [link]
    Van gyakorlati anyag, elméleti anyag, rengeteg példa. :K

  • tototos

    addikt

    válasz Geresics #3889 üzenetére

    na figyi, a szamlalas függvényed honnan tudja a beolvasott szöveget? attól mert ugyanazt a nevet használnod még az nem lesz ugyanaz, plusz a változóknak illik kezdőértéket adni

    void beolvas(char* szoveg)
    {
    printf("Adjon meg egy max. 70 karakter hosszu szoveget, majd usson ENTER-t!\n");
    gets(szoveg);
    }

    int szamlalas(char *szoveg)
    {
    int db [B]= 0[/B];
    int i [B]= 0[/B];
    while (szoveg[i]!='\0' || szoveg[i]!='.')
    {
    if (szoveg[i]=' ') db++; // ha nem használsz {} jeleket akkor érdemes egy sorba írni az if-fel
    i++;
    }
    return db;
    }

Új hozzászólás Aktív témák

Hirdetés