Undefined reference to gotoxy in C

I am trying to write a program in C (code :: blocks in windows). I added the header files below, it compiles without errors, but when it comes to running the code, it gives an undefined error message to gotoxy. Find the full code. The error occurs when I have gotoxy statements.

# include<stdio.h> # include<conio.h> # include<malloc.h> # include<stdlib.h> # include<windows.h> #include<dos.h> 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(); } 

Please help me.

+4
source share
5 answers

The problem you are facing is not related to Code::Blocks , it is related to the compiler used by it (by default MinGW), and because this function is not standard and is not implemented in this compiler. I'm not sure that Borland still provides conio.h , but you can try this one for MinGW .

Take a look at this http://projectsofashok.blogspot.in/2010/05/gotoxy-in-codeblocks.html

You can also try the snippet below, this will work in GCC

 #include<stdio.h> //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 } 

You can also watch NCURSES .

+6
source

For what it's worth, here are some Windows versions of the old Borland features that I wrote, maybe ten years ago.

 /* 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 <windows.h> 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; } 
+3
source

Code :: Blocks (MinGW) does not have a conio.h header file. Therefore you cannot use gotoxy()

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

this works fine in C. but not in code blocks. The problem you are facing is not related to Code :: Blocks, it is related to the compiler used by it (by default MinGW), and this is because this function is not standard and was not implemented in this compiler. try using them:

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

or use Borland C, which supports conio.h. To get it, visit LINK

 # include<stdio.h> # include<conio.h> // you cant use conio.h # include<malloc.h> # include<stdlib.h> # include<windows.h> 
+2
source

There are two things for such questions in C 1) you should have the correct header with the proper prototype (this is me conio.h) 2) you should have the appropriate library for reference in this case, probably something like libconio.lib

Then you need to include the correct header, and you must tell the linker which libraries you want to link to.

The link commands in gcc, for example, are -L and -l, and both are required to use conio.

See also: g ++ conio.h: no such file or directory

Hi

+1
source

this is an error because something is missing that gotoxy can handle try this code

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

Source: https://habr.com/ru/post/1402372/


All Articles