我发现这个代码是相同的。但我没有得到正在做的事。可以有人解释我的代码吗? 这里xmid = getmaxx()/ 2和ymid = getmaxy()/ 2。 我想知道为什么我们使用这些for循环?为什么使用itoa()函数?
line(5,ymid,getmaxx()-5,ymid);
line(xmid+3,5,xmid+3,getmaxy()-5);
for( i= xmid+gap;i<getmaxx()-5;i=i+gap)
{
outtextxy(i,ymid-3,"|");
itoa(i-xmid,str,10);
outtextxy(i,ymid+3,str);
}
for( i= ymid-gap;i>5;i=i-gap)
{
outtextxy(xmid,i,"-");
itoa(ymid-i,str,10);
outtextxy(xmid+5,i,str);
}
for( i= xmid-gap;i>5;i=i-gap)
{
outtextxy(i,ymid-3,"|");
itoa(-(xmid-i),str,10);
outtextxy(i-6,ymid+3,str);
}
for( i= ymid+gap;i<getmaxy()-5;i=i+gap)
{
outtextxy(xmid,i,"-");
itoa(-(i-ymid),str,10);
outtextxy(xmid+8,i,str);
}
答案 0 :(得分:0)
请注意这个答案:我不拥有Turbo C / C ++所以这个答案是基于查找函数定义和签名以及从那里拼凑东西。
(1)itoa
是一个非标准的C函数(特定于microsoft?),它将整数值转换为字符串。它有签名:char* itoa(int, char* int);
。它接受第一个参数中的值并将其转换为第二个参数中的字符数组。最后的整数参数是用于转换字符串的基数。例如,如果我们有int b = 33
:
char buf[33];
itoa(b, buf, 10); // buf would contain '3', '3', '0'
itoa(b, buf, 16); // buf would contain '2', '1', '0'
itoa(b, buf, 2); // buf would contain '0', '0', '1', '0', '0', '0', '0','1'
(2)outtextxy函数用于在屏幕上绘制字符串,并具有函数签名outtextxy(int x, int y, char* string);
参数的第一个给出字符串的x和y坐标(以像素为单位)启动。
(3)线函数用于在屏幕上绘制一条线,并具有函数签名line(int x1, int y1, int x2, int y2);
,其中前两个参数是第一个起始点的x和y坐标(以像素为单位),以及最后两个坐标(以像素为单位)是最后一点。
(4)getmaxx()
和getmaxy()
根据分辨率返回屏幕的宽度和高度(以像素为单位)。因此,如果您的分辨率为1024 x 768,getmaxx()
将返回1024而getmaxy()
将返回768
了解各个功能的作用,我们可以分析代码片段:
line(5,ymid,getmaxx()-5,ymid);
这会在屏幕中间画一条线,从左侧开始5个像素,从右侧开始延伸到5个像素。没有看到完整的代码,我必须假设ymid
是屏幕的中点,即。 int ymid = getmaxy()/2;
line(xmid+3,5,xmid+3,getmaxy()-5);
进行类似的假设int xmid = getmaxx();
,然后此函数绘制一条垂直线,从屏幕下方5个像素到屏幕顶部5个像素。另请注意,我们将xmid
偏移了3,因此此行将偏离右侧三个像素。看不到这段代码的更多代码或上下文,我不知道为什么原作者会选择这样做。
for( i= xmid+gap;i<getmaxx()-5;i=i+gap)
{
outtextxy(i,ymid-3,"|");
itoa(i-xmid,str,10);
outtextxy(i,ymid+3,str);
}
我们不知道gap
的价值是什么,但为了论证,我们假设它是20,并且还假设我们的屏幕分辨率是1024 x 768.根据这些假设,我们可以得出以下结论:
xmid
将是512 getmaxx()
将返回1024 i
将从532开始直到超过1024,步长为20。由此我们知道i
将具有序列{532,552,572,....,992,1032}。有了这个,我们可以查看下一行代码,看看外包是否会画出一个&#39; |&#39;使用上述i值和x坐标中的每一个并使用y值ymid-3
。我对这行代码的最佳猜测是它负责在{x}轴下方几个像素的gap
间隔绘制刻度线。
在下一行中,值i-xmid
将返回距离中心的距离,并将其转换为字符串。例如,第一次通过循环i
将是532,如果我们减去xmid
,我们将得到20,并且我们将使str
具有值&#34; 20&#34 ;.因此,这行代码只是为刻度标记生成标签。
for循环体中的最后一行将在正确的位置打印出字符串,注意outtextxy函数调用中x和y的值,因此标签打印在x轴上方几个像素处
我没有分析其他三个循环,但我怀疑他们做同样的事情,在轴上绘制刻度线。我们使用四个for循环来处理每个轴上的正负方向。