Avatar billede leon_hunt Nybegynder
30. september 2003 - 14:13 Der er 6 kommentarer og
1 løsning

Et simpelt array som driller mig

Jeg er næsten helt grøn i C (og her på eksperten.dk), men jeg er gået i gang med at lave mit første spil (snake i tekstmode). Jeg er kun lige startet, før så melder den første udfordring sig. Jeg vil gerne bruge et array til at holde styr på hvor min slanges X antal led befinder sig.

Men jeg har indtil videre ikke kunne få det til at virke, hvilket har resulteret i at jeg er kommet helt væk fra mit originale snake-spil, og har i stedet lavet en masse små programmer til at hjælpe mig med at forstå hvordan et arrray fungerer.

Og her er det jeg har brug for jeres hjælp, jeg kan simpelthen ikke forstå hvorfor nedenstående program ikke virker efter hensigten. Grundideen var at fylde et array op, med tal som svarer til x-y koordinater på skærmen. Men efter at have fyldt arrayet op, er næsten alle koordinaterne forkerte.

Hvis i prøver at køre programmet kan i se at arrayet bliver fyldt helt forkert op. Der bliver både skrevet forud for, og bagved der hvor det var tænkt at værdierne skulle stå i arrayet. Efter endt kørsel skulle der på skærmen have stået:

9,3
8,3
7,3
6,3
5,3
4,3

men i stedet står der:

9,8
8,7
7,6
6,5
5,4
4,3

Hvorfor?

-------------------

#include <stdio.h>
#include <conio.h>

  int array[6][1];

void main(void)
{
  clrscr();

  int storelsex=18, storelsey=6;

  gotoxy(30,10); cprintf("array nu (x,y):");
  gotoxy(12,3); cprintf("<-- koordinat punkter");


  for(int i=0;i<=5;i++)
  {
    gotoxy(storelsex/2-i,storelsey/2);
    array[i][0]=storelsex/2-i;
    array[i][1]=storelsey/2;
    cprintf("%d", i);

    //test
    gotoxy(1,1); cprintf("%d,%d", array[i][0], array[i][1]);

    gotoxy(35,12); cprintf("%d,%d", array[0][0], array[0][1]);
    gotoxy(35,13); cprintf("%d,%d", array[1][0], array[1][1]);
    gotoxy(35,14); cprintf("%d,%d", array[2][0], array[2][1]);
    gotoxy(35,15); cprintf("%d,%d", array[3][0], array[3][1]);
    gotoxy(35,16); cprintf("%d,%d", array[4][0], array[4][1]);
    gotoxy(35,17); cprintf("%d,%d", array[5][0], array[5][1]);

    gotoxy(2,20); cprintf("%d  storelsex/2-i", storelsex/2-i);
    gotoxy(2,21); cprintf("%d  storelsey/2", storelsey/2);

    getch();
  }
}
Avatar billede arne_v Ekspert
30. september 2003 - 14:19 #1
Der er noget helt galt.

Du erklærer:

int array[6][1];


så kan første index være 0..5 og andet index 0.

Og så bruger du andet index 1.

Det virker ikke.
Avatar billede arne_v Ekspert
30. september 2003 - 14:19 #2
Så prøv først med:

int array[6][2];
Avatar billede fleniels Nybegynder
30. september 2003 - 14:23 #3
prøv at debugge dig igennem, så ser du hvor regnefejlen dukker op
Avatar billede leon_hunt Nybegynder
30. september 2003 - 14:39 #4
Tak Arne V, det virker. Men jeg syntes da at jeg havde prøvet at lave overkill og oprette et array på [20][20] eller sådan  noget?. Oh well :)

Men hvorfor kan det andet kun være 0?

Vil det så også betyde at hvis jeg havde et array på [6][6], så ville det første kunne være 0..5, og det andet kun 0..4?
Hvis ja, hvorfor så det?

(hvordan giver jeg dig dine point?)
Avatar billede arne_v Ekspert
30. september 2003 - 14:43 #5
Ved at jeg svarer.

:-)
Avatar billede arne_v Ekspert
30. september 2003 - 14:45 #6
Et array erklæret [n] kan have index 0..n-1 derfor kan en dimension 6
bruge index 0..5 og en dimension 1 bruge index 0..0 == kun 0, hvorimod
dimension 2 kan bruge 0..1 !

Så [6][6] vil være 0..5 og 0..5 !
Avatar billede ebe Praktikant
30. september 2003 - 14:57 #7
På almindelig dansk:
Hvis du erklærer et array på [1], har du skaffet dig 1 plads til at gemme noget. Men computere starter tællingen med "0" og ikke med "1", derfor hedder første plads "0". Hvis du erklærer [2] har du to pladser. Den første hedder 0 og den anden 1. osv.....

arne v må rette mig, hvis jeg er gal på den..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester