referencia indefinida a gotoxy en C

Estoy tratando de escribir un progtwig en lenguaje C (code :: blocks en windows). He agregado los archivos de encabezado debajo, comstack sin error, pero cuando se trata de ejecutar el código arroja una referencia indefinida de error a gotoxy. Encuentra el código completo. El error viene dondequiera que tenga declaraciones gotoxy.

# include # include # include # include # include #include struct node { int data; struct node *link; }; void append(struct node **,int); void in_begin(struct node **,int); void del(struct node **,int); void in_middle(struct node **,int,int); int count(struct node *); void display(struct node *); char ans; int main() { struct node *p; /* p can be said as the head or a start ptr */ p=NULL; /* Printing the menu */ int num,loc; char choice; do { //clrscr(); printf("PROGRAM TO IMPLEMENT SINGLY LINKED LIST "); printf("\n====================================="); printf("\n\n1.Create \\ Appending The List"); printf("\n2.Insert Node At Begining"); printf("\n3.Insert Node In Middle"); printf("\n4.Deleting a Node"); printf("\n5.Counting The No Of Nodes"); printf("\n6.Displaying the list"); printf("\n7.Exit"); oper: gotoxy(1,15);printf(" "); gotoxy(1,11);printf("\n\nEnter ur Choice : "); choice=getch(); switch(choice) { case '1': // char ans; do { printf("Enter any number : "); scanf("%d",&num); append(&p,num); printf("Enter more (y/n) :"); fflush(stdin); ans=getchar(); }while(ans !='n'); break; case '2': printf("Enter The Data : "); scanf("%d",&num); in_begin(&p,num); break; case '3': printf("\nEnter The Position :"); scanf("%d",&loc); printf("\nEnter The Data : "); scanf("%d",&num); in_middle(&p,loc,num); break; case '4': printf("\nEnter The Data u Want To Delete : "); scanf("%d",&num); del(&p,num); break; case '5': printf("\nThe No Of Nodes Are %d",count(p)); getch(); break; case '6': display(p); getch(); break; case '7': printf("\n\nQuiting......."); getch(); exit(0); break; default: gotoxy(1,15);printf("Invalid choice.Please Enter Correct Choice"); getch(); goto oper; } }while(choice !=7); return 0; } void append(struct node **q,int num) { struct node *temp,*r; temp = *q; if(*q==NULL) { temp = (struct node *)malloc(sizeof(struct node)); temp->data=num; temp->link=NULL; *q=temp; } else { temp = *q; while(temp->link !=NULL) { temp=temp->link; } r = (struct node *)malloc(sizeof(struct node)); r->data=num; r->link=NULL; temp->link=r; } } void display(struct node *q) { if(q==NULL) { printf("\n\nEmpty Link List.Can't Display The Data"); getch(); goto last; } while(q!=NULL) { printf("\n%d",q->data); q=q->link; } last: ; } int count(struct node *q) { int c=0; if(q==NULL) { printf("Empty Link List.\n"); getch(); goto last; } while(q!=NULL) { c++; q=q->link; } last: return c; } void in_begin(struct node **q,int num) { struct node *temp; if(*q==NULL) { printf("Link List Is Empty.Can't Insert."); getch(); goto last; } else { temp=(struct node *)malloc(sizeof(struct node)); temp->data=num; temp->link=*q; *q=temp; /* pointing to the first node */ } last: getch(); } void in_middle(struct node **q,int loc,int num) { struct node *temp,*n; int c=1,flag=0; temp=*q; if(*q==NULL) { printf("\n\nLink List Is Empty.Can't Insert."); getch(); goto last; } else while(temp!=NULL) { if(c==loc) { n = (struct node *)malloc(sizeof(struct node)); n->data=num; n->link=temp->link; temp->link=n; flag=1; } c++; temp=temp->link; } if(flag==0) { printf("\n\nNode Specified Doesn't Exist.Cant Enter The Data"); getch(); } else { printf("Data Inserted"); getch(); } last: getch(); } void del(struct node**q,int num) { if(*q==NULL) { printf("\n\nEmpty Linked List.Cant Delete The Data."); getch(); goto last; } else { struct node *old,*temp; int flag=0; temp=*q; while(temp!=NULL) { if(temp->data==num) { if(temp==*q) /* First Node case */ *q=temp->link; /* shifted the header node */ else old->link=temp->link; free(temp); flag=1; } else { old=temp; temp=temp->link; } } if(flag==0) printf("\nData Not Found..."); else printf("\nData Deleted...Tap a key to continue"); getch(); } last: getch(); } 

Por favor, ayúdame.

El problema al que se enfrenta no está relacionado con Code::Blocks , está relacionado con el comstackdor que está utilizando (MinGW de forma predeterminada), y es porque esa función no es estándar y no se implementó en ese comstackdor. No estoy seguro de si Borland todavía proporciona conio.h , pero podrías probar este para MinGW .

Eche un vistazo a este http://projectsofashok.blogspot.in/2010/05/gotoxy-in-codeblocks.html

También puedes probar el siguiente fragmento, esto funcionará en GCC

 #include //gotoxy function void gotoxy(int x,int y) { printf("%c[%d;%df",0x1B,y,x); } main () { gotoxy(25,50); //reposition cursor printf("hello world"); //display text } 

También puedes echar un vistazo a NCURSES .

Por lo que vale, aquí hay algunas versiones de Windows de las antiguas funciones de Borland que escribí hace una década.

 /* console_functions.h */ #ifndef __WINAPI_CONSOLE_WRAPPER_H #define __WINAPI_CONSOLE_WRAPPER_H void init_console_functions (void); void gotoxy (int x, int y); void clrscr (void); char getch (void); #endif /* __WINAPI_CONSOLE_WRAPPER_H */ /* console_functions.c */ #include "ConsoleFunctions.h" #include  static HANDLE hStdout; static HANDLE hStdin; static CONSOLE_SCREEN_BUFFER_INFO csbi; static const COORD startCoords = {0,0}; void init_console_functions (void) { hStdout = GetStdHandle(STD_OUTPUT_HANDLE); hStdin = GetStdHandle(STD_INPUT_HANDLE); GetConsoleScreenBufferInfo(hStdout, &csbi); } void gotoxy(int x, int y) { COORD coord; coord.X = x; coord.Y = y; SetConsoleCursorPosition(hStdout,coord); } void clrscr(void) { DWORD dummy; FillConsoleOutputCharacter(hStdout, ' ', csbi.dwSize.X * csbi.dwSize.Y, startCoords, &dummy); gotoxy(0,0); } char getch(void) { INPUT_RECORD inp_rec; DWORD bytes_read; BOOL success; do { success = PeekConsoleInput(hStdin, &inp_rec, 1, &bytes_read); FlushConsoleInputBuffer(hStdin); } while(!success || inp_rec.EventType != KEY_EVENT || bytes_read==0); return (char)inp_rec.Event.KeyEvent.uChar.AsciiChar; } 

Code :: Blocks (MinGW) no tiene el archivo de encabezado conio.h. Entonces no puedes usar gotoxy()

  #include #include main() { gotoxy(10, 10); printf("C program to change cursor position."); getch(); return 0; } 

esto funciona bien en C. pero no en bloques de código. El problema al que se enfrenta no está relacionado con Code :: Blocks, está relacionado con el comstackdor que está utilizando (MinGW de forma predeterminada), y es porque esa función no es estándar y no se implementó en ese comstackdor. intente usar estos:

 SetConsoleCursorPosition(hConsole, TL); HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); 

o use Borland C, que es compatible con conio.h. Para obtenerlo, visite LINK

 # include # include // you cant use conio.h # include # include # include 

Hay dos cosas para este tipo de preguntas en C 1) tienes que tener el encabezado correcto con el prototp adecuado (esto conio.h) 2) tienes que tener la biblioteca adecuada para enlazar en este caso, probablemente algo a lo largo de libconio .lib

Luego debe incluir el encabezado correcto y debe informar al vinculador sobre qué bibliotecas desea vincular.

Los comandos de enlace en gcc, por ejemplo, son -L y -l y ambos son necesarios para usar conio.

Ver también: g ++ conio.h: no existe tal archivo o directorio

Saludos

es un error porque falta algo que pueda manejar el gotoxy pruebe este código

 int gotoxy(int x,int y) { COORD coord = {x,y}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord); }