在C中对gotoxy的未定义引用

我正在尝试用C语言编写程序(Windows中的代码::块)。 我添加了下面的头文件,它编译时没有错误,但是当它运行代码时,它会抛出一个错误未定义的引用gotoxy。 找到完整的代码。 我遇到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(); } 

请帮我。

您遇到的问题与Code::Blocks无关,它与它正在使用的编译器(默认为MinGW)有关,这是因为该函数不是标准函数,并且未在该编译器中实现。 我不确定Borland是否仍然提供conio.h ,但你可以尝试这个为MinGW

看看这个http://projectsofashok.blogspot.in/2010/05/gotoxy-in-codeblocks.html

您也可以尝试下面的代码片段, 这将在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 } 

你也可以看看NCURSES 。

对于它的价值,这里有一些Windows版本的旧Borland函数我可能在十年前写的。

 /* 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)没有conio.h头文件。 所以你不能使用 gotoxy()

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

这在C中工作正常,但在代码块中没有。 您遇到的问题与Code :: Blocks无关,它与它正在使用的编译器(默认为MinGW)有关,这是因为该函数不是标准函数,并且未在该编译器中实现。 尝试使用这些:

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

或使用支持conio.h的Borland C. 获取它访问LINK

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

在C中有两种类型的问题1)你必须有正确的标题与正确的prototp(这个我conio.h)2)你必须有适当的库链接在这种情况下可能是libconio的东西的.lib

然后,您必须包含正确的标头,并且必须通知链接器您要链接的库。

gcc中的链接命令例如是-L和-l,并且两者都需要使用conio。

另请参阅: g ++ conio.h:没有这样的文件或目录

问候

它是错误的,因为缺少可以处理gotoxy的东西尝试此代码

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