référence non définie à gotoxy en C

J’essaie d’écrire un programme en langage C (code :: blocks in windows). J’ai ajouté ci-dessous les fichiers d’en-tête, il est compilé sans erreur, mais lorsqu’il s’agit d’exécuter le code, une erreur est renvoyée à gotoxy. Trouvez le code complet. L’erreur vient partout où j’ai des déclarations 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(); } 

Aidez-moi, s’il vous plaît.

Le problème que vous rencontrez n’est pas lié à Code::Blocks , mais au compilateur qu’il utilise (MinGW par défaut), et c’est parce que cette fonction n’est pas standard et n’a pas été implémentée dans ce compilateur. Je ne sais pas si Borland fournit toujours conio.h , mais vous pouvez essayer celui-ci pour MinGW .

Jetez un oeil à cette http://projectsofashok.blogspot.in/2010/05/gotoxy-in-codeblocks.html

Vous pouvez également essayer l’extrait ci-dessous, cela fonctionnera dans 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 } 

Vous pouvez également consulter NCURSES .

Voici ce qu’il convient de faire, voici quelques versions Windows des anciennes fonctions de Borland que j’avais écrites il ya peut-être une décennie.

 /* 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) n’a pas de fichier d’en-tête conio.h. Donc, vous ne pouvez pas utiliser gotoxy()

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

cela fonctionne très bien en C. mais pas dans les blocs de code. Le problème que vous rencontrez n’est pas lié à Code :: Blocks, mais au compilateur qu’il utilise (MinGW par défaut), et c’est parce que cette fonction n’est pas standard et n’a pas été implémentée dans ce compilateur. essayez d’utiliser ceux-ci:

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

ou utilisez Borland C qui supporte conio.h. Pour l’obtenir, visitez le LINK

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

Il y a deux choses pour ce genre de questions en C 1) vous devez avoir le bon en-tête avec le bon prototp (this con conio.h) 2) vous devez avoir la bonne bibliothèque avec laquelle vous pouvez créer un lien, probablement quelque chose dans libconio .lib

Vous devez ensuite inclure l’en-tête approprié et indiquer à l’éditeur de liens les bibliothèques que vous souhaitez lier.

Les commandes de lien dans gcc, par exemple, sont -L et -l et les deux sont nécessaires pour utiliser conio.

Voir aussi: g ++ conio.h: aucun fichier ni répertoire de ce type

Cordialement

c’est une erreur car il manque quelque chose qui peut gérer le gotoxy essayez ce code

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