gpt4 book ai didi

c - 如何创建 union

转载 作者:行者123 更新时间:2023-11-30 20:27:57 25 4
gpt4 key购买 nike

我在使用union时犯了一个错误,我不知道为什么。问题出在函数goto_xy();我从书上看的,但是无法编译。在此函数中,我尝试定位光标,但未声明 REGS 变量。我想知道它的作用是什么。

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

void goto_xy(int x,int y); //goto is a key word;define the subfunction to creat the original cursor int the coordinate system
void rectangle_clear(int x1,int x2,int y1,int y2); //define the rectangle_clear opening subfunction
void center_clear(int x1,int x2,int y1,int y2); //define the center_clear opening subfunction
void creat(); //define the subfunction of creating the star
int main() //the main function
{
creat();
getch();
center_clear(0,25,0,79);
getch();
}
void center_clear(int x1,int x2,int y1,int y2) //the subfunction which creats the stars while opening the project
{
int x00,y00,x0,y0,i,d;
if((y2-y1)>(x2-x1))
{
d=(x2-x1)/2;
x0=(x1+x2)/2;
y0=y1+d;
y00=y2-d;
for(i=0;i<(d+1);i++)
{
rectangle_clear((x0-i),(x00+i),(y0-i),(y00+i));
}
delay(10); //to delay the dismis of the star
}
else
{
d=(y2-y1)/2;
y0=(y1+y2)/2;
x0=x1+d;
x00=x2-d;
for(i=0;i<d+1;i++)
{
rectangle_clear((x0-i),(x00+i),(y0-i),(y00+i));
}
delay(10);
}
}
void rectangle_clear(int x1,int x2,int y1,int y2) //to creat the star int the shape of a rectangle
{
int i,j;
for(i=y1;i<y2;i++)
{
goto_xy(x1,i);
putchar(' ');
goto_xy(x2,i);
putchar(' ');
delay(10);
}
for(j=x1;j<x2;j++)
{
goto_xy(i,y1);
putchar(' ');
goto_xy(i,y2);
putchar(' ');
delay(10);
}
}
void goto_xy(int x,int y)
{
union REGS r;

r.h.ah=2;
r.h.dl=y;
r.h.dh=x;
r.h.bh=0;
int86(0x10,&r,&r);
}
void creat()
{
int i,j;
for(i=0;i<24;i++)
{
for(j=0;j<79;j++)
{
goto_xy(i,j);
printf("a");
}
}
}

最佳答案

在我看来, union REGS 必须已经存在于一个头文件中,并且您包含相同的头文件。

从下面的代码可以看出,甚至像 h 这样的 union 成员和 h 的成员也存在,这意味着 union 存在于某些头文件,并且您将其包含在内。

void goto_xy(int x,int y)
{
union REGS r;

r.h.ah=2; //Here you are accessing the member of REGS and even the sub-members of h
r.h.dl=y;
r.h.dh=x;
r.h.bh=0;
int86(0x10,&r,&r);
}

编辑:谷歌搜索告诉我,UNION REGS 将在 dos.h 中定义,它有点像

union REGS { 
struct WORDREGS x;
struct BYTEREGS h;
};

所以,您需要包含 dos.h 来解决您的问题。但是,尽管您考虑了这一点,但这个问题仍然存在。您也可以打开 dos.h 并检查 union REGS 是否存在。

参见here了解更多详情。

关于c - 如何创建 union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15203817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com