首先在网上面看见的笑脸程序运行不了是因为编译器的不同产生的,vc中没有gotoxy函数。
所以产生了一些列的问题,现在我们首先就要解决指定光标位置的函数。
#include "windows.h"
void gotoxy(int x,int y)
{
COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
在vc6.0中自定义一个gotoxy函数。
SetConsoleCursorPosition是API中定位光标位置的函数。
console 控制台
cursor
光标
GetStdHandle(STD_OUTPUT_HANDLE)获取标准输出的句柄。 命令行的程序
会把字符输出到屏幕上。
handle就是句柄,句柄就是系统服务你的凭证。
你去过银行吧,门口有个排队机,
你从排队机上撕下一张票来,这个就是银行为你服务的凭证,没有这个凭证,银行不理你。
获取标准输出的句柄。 命令行的程序 会把字符输出到屏幕上,
用的就是这个句柄。
搞清楚这个问题后,我们继续做我们的事情:
struct move_point
{
int x,y;
int xv,yv;
}man;
int main()
{ man.xv=1;
man.yv=1;
/*给结构体的变量赋初值,这里是速度*/
while(man.x<100)
{
gotoxy(man.x,man.y);
printf(" ");
man.x+=man.xv;
man.y+=man.yv;
gotoxy(man.x,man.y);
printf("%cb",2);
}
getchar();
return 0;
}
这个时候发现达不到想要的效果,这是因为运行速度太快了。
所以我们还需要写点延时程序:
直接调用windows.h中的Sleep(num)就可以了,其中num是毫秒数,这里就设为1000即1秒。
哈哈,现在完整的程序如下:
#include "stdio.h"
#include "stdlib.h"
#include "windows.h"
void gotoxy(int x,int y)
{
COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
struct move_point
{
int x,y;
int xv,yv;
}man;
int main()
{ man.xv=1;
man.yv=1;
while(man.x<100)
{
Sleep(1000);
gotoxy(man.x,man.y);
printf(" ");
man.x+=man.xv;
man.y+=man.yv;
gotoxy(man.x,man.y);
printf("%cb",2);
}
getchar();
return 0;
}
现在感受到成功的喜悦了吧,而且在这个程序中还学到了清屏函数,调试程序如下:
void main()
{
int a=1;
while(a<100)
{ system("cls");
a++;
printf("%*c",a,2);
}
}