重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
fseek有三个参数,第1个是文件句柄,通过打开文件时得到;第2个就是移动的字节数,这个数可以是正的,就是向后(文件尾部)移动,也可以是负的,即向前(文件头部)移动;第3个参数指明从哪里移动,如果写SEEK_SET就是从文件头部移动多少字节,如果写SEEK_END则是从尾部开始移动,SEEK_CUR则是从当前位置移动。
创新互联公司专业为企业提供白沙黎族网站建设、白沙黎族做网站、白沙黎族网站设计、白沙黎族网站制作等企业网站建设、网页设计与制作、白沙黎族企业网站模板建站服务,10多年白沙黎族做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
比如
要将文件指针移动到文件开始的第24字节位置:fseek(fp,24,SEEK_SET);
移动到文件尾部向前50字节:fseek(fp,-50,SEEK_SET);
在当前位置移动8个字节(跳过8个字节数据):fseek(fp,8,SEEK_CUR);
在当前位置向前移动16个字节(准备重新读取数据):fseek(fp,-16,SEEK_CUR);
#include stdio.h
void fun(int value,int n,int dire)
{
if(dire==0) return;
int x=1(sizeof(int)*8-1);
int temp;
int i;
if(dire0)
{
for(i=0;in;i++)
{
temp=value1;
value=1;
if(temp) value|=x;
}
}
else
{
for(i=0;in;i++)
{
temp=value x;
value=1;
if(temp) value|=1;
}
}
}
void main()
{
int x=0x55555555;
fun(x,1,1);
printf("%x",x);
}
可以通过设置WASD的程序控制玩家移动。
如果需要平滑的按键输入,或者同时按下多个按键,就不能用getch()了,需要使用另一个WindowsAPI函数:GetAsyncKeyState()。该函数原型如下:
SHORTGetAsyncKeyState(intvKey
//virtual-keycode);
vKey是要检测的按键的虚拟键码,常用的如VK_UP、VK_DOWN等,分别表示方向键的上、下等。需要注意:对于26个字母的键码,可以直接写'A'、'B'??,而不要写VK_A、VK_B。数字键也是,请直接写'0'、'1'??。全部的256种虚拟键码,请参考MSDN中的Virtual-KeyCodes。
返回的SHORT值,如果最高位为1,表示该键被按下;否则表示该键弹起。该函数的最低位还可以用来检测开关键(比如大小写锁定键)的状态。作为按键处理,还可以使用GetKeyState、GetKeyboardState等函数,详细请参考MSDN手册中的KeyboardInputFunctions部分。
希望这个能对你有帮助:#include
#include
int
main(void){
int
c
;
while(1){
c
=
getch();
if(c==0)
c=getch();
//
getch在遇到方向键时会返回0
再使用getch便会返回扫描码
if(
c
==
72
)
printf("UP\n");
//
我帮你把上下左右数据调出来
你用的时候define成
UP来使用这个值就可以了
if
(
c
==
80)
printf("DOWN\n");
if
(
c
==
75)
printf("LEFT\n");
if
(
c
==
77)
printf("RIGHT\n");
if(c
==
113)
//按q退出
break;
}
return
0;
}
在C代码中可设置如下自编的intokey( )函数,用以接收方向键值。库函数kbhit( )是检测是否有按键被按下,库函数getch( )是读取键盘按键值的,不需按回车,也不回显。dir是代表方向的变量,根据不同的方向键值,让dir取1到4这四个不同的值。其它的程序段就可根据dir的值让东西朝某个方向移动。方向键按下后会产生2个值,第一个是224,另一个分别为上下左右的72、80、75、77,因此要读取2次值来判断。要包含#includeconio.h .
void intokey( )
{ int flag;
if ( kbhit( ) ) //判断有键按下时才执行下面的操作
{ flag = getch( ); //用flag来获取键值
if (flag==224) flag = getch( ); //值为224时表示按下了方向键,要再次获取才行
if (flag==72 dir != 2) dir = 1; //方向键为“上”且原方向不为下时,让dir=1.
if (flag==80 dir != 1) dir = 2; //方向键为“下”且原方向不为上时,让dir=2.
if (flag==75 dir != 4) dir = 3; //方向键为“左”且原方向不为右时,让dir=3.
if (flag==77 dir != 3) dir = 4; //方向键为“右”且原方向不为左时,让dir=4.
}
}
注:这个函数来源于某些“贪吃蛇”的代码,略有修改,足可获取方向键值。其中的1、2、
3、4分别对应着上下左右。
通过使用getch()函数接受键盘输入的字符控制移动,然后再刷屏,就这么简单
下面给一个参考程序
#includestdio.h
#includestdlib.h
#includeconio.h
#define N 6
int x=1, y=1;
int current_value=0;
int map[N][N]={ {1,1,1,1,1,1},{1,0,0,0,0,1},{1,0,0,0,0,1},{1,0,0,0,0,1},{1,0,0,0,0,2},{1,1,1,1,1,1} };
void print()
{
int i, j;
for(i=0; iN; i++)
{ for(j=0; jN; j++)
{
if(i==y j==x)
{printf("#");
continue;
}
if(map[i][j]==1)
printf("*");
if(map[i][j]==0)
printf("-");
if(map[i][j]==2)
printf("$");
}
printf("\n");
}
}
int control(char ch)
{
switch(ch)
{
case 'a':
{ if(map[y][x-1]==0 || map[y][x-1]==2)
{
x--;
current_value=map[y][x];
return 1;
}
else
return 0;
}
case 'd':
{ if(map[y][x+1]==0 || map[y][x+1]==2)
{
x++;
current_value=map[y][x];
return 1;
}
else
return 0;
}
case 's':
{ if(map[y+1][x]==0 || map[y+1][x]==2)
{
y++;
current_value=map[y][x];
return 1;
}
else
return 0;
}
case 'w':
{ if(map[y-1][x]==0 || map[y-1][x]==2)
{
y--;
current_value=map[y][x];
return 1;
}
else
return 0;
}
default :return 0;
}
}
int main()
{
int i, j;
int done=0;
int success=0;
char ch;
print();
while (!success)
{
ch=getch();
if(ch=='0')
break;
done=control(ch);
if(done)
{
system("cls");
print();
}
if(map[y][x]==2)
{success=1;
break;
}
}
if(success)
printf("恭喜你闯关成功!!、\n");
else
printf("再接再厉~~\n");
return 0;
}