Sida 1 av 1

C problem (2d array)

Postat: 29 januari 2009, 21:13:12
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:

Re: C problem (2d array)

Postat: 29 januari 2009, 21:22:32
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?

Re: C problem (2d array)

Postat: 29 januari 2009, 21:26:02
av net4all
Aha, tack för snabbt svar!

(känner till memset, byter kanske sen)

Re: C problem (2d array)

Postat: 30 januari 2009, 08:55:36
av speakman
memset(&weights, 0, sizeof(weights)); borde fungera ypperligt.

Re: C problem (2d array)

Postat: 30 januari 2009, 15:05:00
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... :?

Re: C problem (2d array)

Postat: 30 januari 2009, 15:10:44
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.