C problem (2d array)

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
net4all
Inlägg: 538
Blev medlem: 7 februari 2007, 12:06:34

C problem (2d array)

Inlägg av net4all »

Hej, har just börjat på ett program i C, men något går snett..

Programmet skapar 2st globala arrays, weights och value.
Dessa ska sedan modifieras med olika funktioner senare, nu ska dom bara rensas med vclear() och wclear()
Sedan skrivs värdet ut med vprint() och wprint(), då får jag konstiga värden tillbaka, se längre ned.

Testa att kompilera och kör.

Kod: Markera allt

#include <stdlib.h>
#include <stdio.h>

#define LEVELS 6
#define NEURONS 2

int weights[LEVELS][NEURONS];
int value[LEVELS][NEURONS];

int vclear( void )
{
    int i, i2;
    for(i=0 ; i<=LEVELS ; i++)
    {
        for(i2=0 ; i2<=NEURONS ; i2++)
        {
            value[i][i2] = 0;
        }
    }

    return 0;
}

int wclear( void )
{
    int i, i2;
    for(i=0 ; i<=LEVELS ; i++)
    {
        for(i2=0 ; i2<=NEURONS ; i2++)
        {
            weights[i][i2] = 21;
        }
    }

    return 0;
}

int vprint( void )
{
    int i, i2;
    for(i=0 ; i<=LEVELS ; i++)
    {
        printf("value level%i ",i);
        for(i2=0 ; i2<=NEURONS ; i2++)
        {
            printf("%i ",value[i][i2] );
        }
        printf("\n");
    }

    return 0;
}

int wprint( void )
{
    int i, i2;
    for(i=0 ; i<=LEVELS ; i++)
    {
        printf("weights level%i ",i);
        for(i2=0 ; i2<=NEURONS ; i2++)
        {
            printf("%i ",weights[i][i2] );
        }
        printf("\n");
    }

    return 0;
}


int main(int argc, char *argv[])
{
    vclear();
    wclear();

    vprint();
    wprint();

    return 0;
}
Jag får detta som output:

Kod: Markera allt

value level0 21 21 21
value level1 21 0 0
value level2 0 0 0
value level3 0 0 0
value level4 0 0 0
value level5 0 0 0
value level6 0 0 0
weights level0 21 21 21
weights level1 21 21 21
weights level2 21 21 21
weights level3 21 21 21
weights level4 21 21 21
weights level5 21 21 21
weights level6 21 21 21
"value level0"-raden borde också vara 0, eller?? :humm:
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Re: C problem (2d array)

Inlägg av cykze »

Om du har t ex har en 1D-array som deklareras som "int var[2];", så innehåller den 2 element nämligen var[0] och var[1]. Det finns alltså inget element var[2]. Det är det felet som du har gjort här. Alltså byt ut alla "<=" mot "<" så blir det rätt.

Sen kanske du vill kolla på funktionen memset().

edit: Hmm. memset() kanske inte fungerar så bra med int?
net4all
Inlägg: 538
Blev medlem: 7 februari 2007, 12:06:34

Re: C problem (2d array)

Inlägg av net4all »

Aha, tack för snabbt svar!

(känner till memset, byter kanske sen)
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Re: C problem (2d array)

Inlägg av speakman »

memset(&weights, 0, sizeof(weights)); borde fungera ypperligt.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Re: C problem (2d array)

Inlägg av cykze »

Just värdet 0 borde gå att sätta så där. Men värdet 21 blir det nog svårare med.

Fast jag blev väldigt förvirrad efter att ha läst det här. Om jag tolkar det rätt så kan det innebära att en int med alla bitar satta till 0 inte behöver ha värdet 0 i C99! Öhh... :?
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Re: C problem (2d array)

Inlägg av speakman »

Näe det blir nog svårare då det bara är ena ledet som ska ha 21. Jag såg bara ena clear-funktionen.
Skriv svar