Avatar billede vuffe Nybegynder
30. november 2003 - 00:19 Der er 19 kommentarer og
1 løsning

hvordan bruger jeg gotoxy ?

hej...jeg har brugt rigtig lang tid på at sætte mig ind i brug af gotoxy, men compileren melder stadig fejl til mig. hvad er der galt med min kode?

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

void gotoxy(int x, int y)
{
    HANDLE hConsoleOutput = GetStdHandle( STD_OUTPUT_HANDLE );
    COORD cursorPosition;
    cursorPosition.X = x+1;
    cursorPosition.Y = y+1;

    SetConsoleCursorPosition(
        hConsoleOutput,        // handle to screen buffer
        cursorPosition        // new cursor coordinates
   
        );
}

jeg får fejlen: unresolved external symbol _main
                1 unresolved externals

håber i kan hjælpe, hilsen vuffe
Avatar billede arne_v Ekspert
30. november 2003 - 00:23 #1
Der er ikke noget main i den kode.

Hvis du kun compiler den er det OK.

Hvis du også forsøger at linke får du fejl fordi du ingen main har.

Compile med -c eller /c for at undgå link.
Avatar billede vuffe Nybegynder
30. november 2003 - 00:28 #2
ja det er også ved at gå op for mig, jeg har prøvet at sætte main ind flere gange, men så får jeg bare andre fejl...hvordan skal det se ud?
Avatar billede vuffe Nybegynder
30. november 2003 - 00:29 #3
hvis jeg sætter main ind før void gotoxy, siger den at det er ulovligt at indsætte local function gotoxy
Avatar billede arne_v Ekspert
30. november 2003 - 00:29 #4
int main()
{
  return 0;
}

skulle være nok til at få det til at linke.
Avatar billede arne_v Ekspert
30. november 2003 - 00:30 #5
#include <iostream.h>
#include <windows.h>
#include <stdio.h>
#include <conio.h>

void gotoxy(int x, int y)
{
    HANDLE hConsoleOutput = GetStdHandle( STD_OUTPUT_HANDLE );
    COORD cursorPosition;
    cursorPosition.X = x+1;
    cursorPosition.Y = y+1;

    SetConsoleCursorPosition(
        hConsoleOutput,        // handle to screen buffer
        cursorPosition        // new cursor coordinates
 
        );
}

int main()
{
  return 0;
}
Avatar billede arne_v Ekspert
30. november 2003 - 00:30 #6
Men main skal vel også kalde gotoxy ??
Avatar billede vuffe Nybegynder
30. november 2003 - 00:32 #7
ja det var ligesom det der var idéen...ellers får jeg ikke udført min kode jo.
Avatar billede arne_v Ekspert
30. november 2003 - 00:36 #8
int main()
{
  int i;
  for(i=0;i<20;i++)
  {
    gotoxy(i,i);
    putch('*');
  }
  return 0;
}

vil vel vise om det virker.
Avatar billede arne_v Ekspert
30. november 2003 - 00:40 #9
Tilbage i september lavede jeg dette eksempel:

#include <time.h>
#include <stdlib.h>
#include <string.h>

#include <windows.h>

CRITICAL_SECTION cs;
HANDLE console;

void gotoxy(int x,int y)
{
  COORD pos;
  pos.X = x;
  pos.Y = y;
  SetConsoleCursorPosition(console, pos);
}

void loop1()
{
  char c[] = { '|', '/', '-', '\\', '|', '/', '-', '\\' };
  int i = 0;
  while(true)
  {
      EnterCriticalSection(&cs); 
      gotoxy(40,10);
      DWORD dummy;
      WriteConsole(console, &c[i % 8], 1, &dummy, NULL);
      LeaveCriticalSection(&cs); 
      Sleep(1000);
      i++;
  }
}

void loop2()
{
  while(true)
  {
      EnterCriticalSection(&cs); 
      gotoxy(30,1);
      time_t t = time(NULL);
      DWORD dummy;
      char *s = ctime(&t);
      WriteConsole(console, s, strlen(s), &dummy, NULL);
      LeaveCriticalSection(&cs); 
      Sleep(1000);
  }
}

DWORD __stdcall loop1dispatch(void *p)
{
  loop1();
  return 0;
}

DWORD __stdcall loop2dispatch(void *p)
{
  loop2();
  return 0;
}

void threadloop1()
{
  DWORD id;
  CreateThread(NULL,0,loop1dispatch,NULL,0,&id);
}

void threadloop2()
{
  DWORD id;
  CreateThread(NULL,0,loop2dispatch,NULL,0,&id);
}

int main()
{
  system("CLS");
  console = GetStdHandle(STD_OUTPUT_HANDLE);
  InitializeCriticalSection(&cs); 
  threadloop2();
  loop1();
  return 0;
}
Avatar billede vuffe Nybegynder
30. november 2003 - 00:41 #10
"!#¤!"¤#" NU FÅR JEG DEN FORBANDEDE FEJL IGEN! :

"void __cdecl gotoxy(int,int)" (?gotoxy@@YAXHH@Z)

jeg ved fanme ikke hvorfor jeg får den! har du nogen idé? jeg spekulerer lidt i om det er headerfilen der er noget i vejen med. Jeg har kigget i conio.h og windows.h og der var overhovedet ikke nogle definitioner af gotoxy. Derfor har jeg været på nettet og hentet en anden headerfil hvor gotoxy er defineret og kopieret det ind i windows.h . men det ser ud til at det ikke virker helt... :(
Avatar billede vuffe Nybegynder
30. november 2003 - 00:43 #11
hey arne dit eksempel virker! tak, jeg kigger lige lidt og ser om der er noget jeg kan bruge
Avatar billede arne_v Ekspert
30. november 2003 - 10:04 #12
Når du får den fejl - comoiler du så det hele i en fil eller ?
Avatar billede vuffe Nybegynder
30. november 2003 - 17:14 #13
ehh er vidst ikke lige helt med...men jeg har brugt dit eksempel til at finde ud af hvordan jeg skal gøre. Som du sagde tidligere var problemet bare at jeg skulle have en main der kalder funktionen. Så mange tak for hjælpen!
Avatar billede vuffe Nybegynder
30. november 2003 - 18:48 #14
jeg får også den der irriterende fejl hvis jeg henter et program fra internet og jeg så prøver at sige "build".
Avatar billede arne_v Ekspert
30. november 2003 - 19:27 #15
Kan du komme med et helt eksempel som giver fejel, så kan jeg jo prøve om
jeg får den hos mig.
Avatar billede vuffe Nybegynder
30. november 2003 - 20:09 #16
nu er det godt nok ikke mit program, men et jeg har hentet fra internet, når jeg compiler er det fint, men når jeg bygger giver den 6 fejl af typen:
(?gotoxy@@YAXHH@Z)

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <time.h>
#include <math.h>
#include <windows.h>

// coded by avn
// this is my new snake game project
// history of project
// start date : 4-march-2000
static  int snake[300][2] , food[30][2] , screen[81][51],i,j,k;
static  int headx,heady,foodx,foody,level,tail,tailx,taily;
char key,dir;
main()
{
textbackground(0);
clrscr();
level=0;
goto jump;
printf(" Thousands year ago there was snake...'techkiton' \n");
delay(2000);
printf (" she was trying to defeat  'abacatrus' the evil snake. \n");
delay(2000);
printf (" We have  learned about 'techkiton'  from history books..\n");
delay(2000);
printf (".. an ancient snake...\n");
delay(2000);
printf (" But things can repeat in history.....\n");
delay(2000);
printf  ("IT IS YOUR TURN NOW !\n");
delay(2000);
getch();
jump:
//getch();

//barrier walls
for (i=1 ; i<=80 ; i++)
screen[i][1]=1;
for (i=1 ; i<=80 ; i++)
screen[i][49]=1;
for (i=1 ; i<=49 ; i++)
screen[1][i]=1;
for (i=1 ; i<=49 ; i++)
screen[80][i]=1;


//make necessary empty roads for snakes movement
//for (i=1; i<=80 ; i+=4)
//for (j=1; j<=24 ; j++)
//if  (screen[i][j]==1) { gotoxy(i,j) ; printf("Û");delay(1); }

//display the game area
for (i=1; i<=80 ; i++)
for (j=1; j<=49 ; j++)
if  (screen[i][j]==1) { gotoxy(i,j) ; printf("Û");delay(1); }
//end of initialization ...


//start:
crash:
tail=0;
dir='x';
//initialize snake's first coordinates
do{
headx=(80)+1;
heady=(48)+1;
snake[0][0]=headx;
snake[0][1]=heady;}
while (screen[headx][heady]==1);

//display the game area
for (i=2; i<=79 ; i++)
for (j=2; j<=48 ; j++)
if  (screen[i][j]==1) { textcolor(6);gotoxy(i,j) ; cprintf("Û");delay(1); }
else { textcolor(16); gotoxy(i,j) ; cprintf("Û"); }

//put foods
for (i=0 ; i<30 ; i++)
do{
foodx=(78)+2;
foody=(47)+2;
food[i][0]=foodx;
food[i][1]=foody;}
while (screen[foodx][foody]==1 || (foodx==headx && foody==heady) );

//display foods
textcolor(14);
for (i=1; i<30 ; i++)
{
foodx=food[i][0];
foody=food[i][1];
gotoxy(foodx,foody) ; if (food[i][0]!=0)  cprintf("$");
}

//for (i=1;i<=79;i++)
//{textcolor(0);
//gotoxy(i,50);cprintf("Û");}


//the main loops for playing
main_loop:
//get end of tail coordinates
{
tailx=snake[tail][0];
taily=snake[tail][1];
}

if (tail!=0)
{
for (i=tail ; i>0 ; i--)
{snake[i][0]=snake[i-1][0];
snake[i][1]=snake[i-1][1];
}
}

//draw snake
//for (i=0 ; i<=tail ;i++)
//if (snake[i][0]!=0  && snake[i][1]!=0)
//{ gotoxy(snake[i][0],snake[i][1]); printf("Û");}

//erase the last part of tail
if (tailx!=0 && taily!=0)
{ gotoxy(tailx,taily); printf(" "); }

//move snake
switch (dir)
  {
  //up
  case 'u':
  if  (heady>1) heady-=1;
  snake[0][1]=heady;break;
  //down
  case 'd' :
  if  (heady<49) heady+=1;
  snake[0][1]=heady;break;
  //left
  case 'l':
  if  (headx>1) headx-=1;
  snake[0][0]=headx;break;
  //right
  case 'r' :
  if  (headx<80) headx+=1;
  snake[0][0]=headx;break;
  //pause
  case 'p': dir='p'; while (!kbhit()) ;break;
  }

//control if snake has crashed
if (screen[headx][heady]==1)  { textcolor(5) ; gotoxy(25,25);cprintf("    CRAHSHED ! Hit space.. ");while(getch()!=32);goto crash;}
//contol if snake crashed to himself
for (i=1;i<=tail;i++)
if  (headx==snake[i][0] && heady==snake[i][1])
    {textcolor(5);
    gotoxy(25,25);cprintf("  CRAHSHED ! Hit space.. ");while(getch()!=32);goto crash;
      }
//control if snake ate a dollar
for (i=1; i<30 ; i++)
{
foodx=food[i][0];
foody=food[i][1];
if (headx==foodx && heady==foody && food[i][0]!=0)
  { //ok it ate a dollar
    food[i][0]=0;
    tail+=5;
  }
}


//draw snake
textcolor(9);
for (i=0 ; i<=tail ;i++)
if (snake[i][0]!=0  && snake[i][1]!=0)
{ gotoxy(snake[i][0],snake[i][1]); cprintf("Û"); }


delay(100);

//read from keyboard
//if a key is pressed read the key
if (kbhit())
{
  key=getch();
  switch (key)
  {
  //up
  case 72: if (dir!='d')  dir='u';break;
  //down
  case 80: if (dir!='u') dir='d';break;
  //left
  case 75: if (dir!='r') dir='l';break;
  //right
  case 77: if (dir!='l') dir='r';break;
  //pause
  case 'p':dir='p';break;
  //exit
  case 27: exit(0) ; break;
  }
}


goto main_loop;

getch();
}
Avatar billede arne_v Ekspert
30. november 2003 - 20:27 #17
Mystisk.

Hvad compiler bruger du ?

Jeg får andre fejl end dig med både BC++B 5.5, VC++ 6.0 og Mingw GCC 3.1 !

Hvis jeg erstatter Delay med Sleep, så kan BC++B builde den, men programmet
virker dog ikke helt.
Avatar billede vuffe Nybegynder
30. november 2003 - 20:34 #18
der står også at man skal have C++ TurboC for at kunne køre det....ved ikke om det er det...
Avatar billede arne_v Ekspert
30. november 2003 - 20:37 #19
Det kunne det godt være.

En anden ting er at det muligvis er vigtigt at compile det som C fremfor C++
altså at kalde filen .c og ikke .cpp !
Avatar billede vuffe Nybegynder
01. december 2003 - 00:28 #20
:( det er meget mystisk...den gør det også i andre tilfælde...
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