通讯录
#include <stdio.h>
struct data
{
int id;
char name[10];
long int phone;
};
int Add(int length,struct data ar[])
{
printf("--------------\n");
printf("请输入id\n");
scanf("%d",&ar[length].id);
printf("--------------\n");
printf("请输入姓名\n");
scanf("%s",ar[length].name);
printf("--------------\n");
printf("请输入电话号码\n");
scanf("%ld",&ar[length].phone);
length++;
return length;
}
void show(int length,struct data ar[])
{
int i;
for(i=0;i<length;++i)
{
printf("id:%d\tname:%s\tphone:%ld\n",ar[i].id, ar[i].name, ar[i].phone);
//printf("name:%s\t",ar[i].name);
//printf("phone:%ld\n",ar[i].phone);
}
}
int delete(int length,struct data ar[])
{
int i,j,k;
long int num;
char m[10];
printf("--------------\n");
printf("|1.按姓名删除|\n");
printf("|2.按电话号码删除|\n");
scanf("%d",&k);
if(1==k)
{
printf("-----------1---\n");
printf("请输入姓名\n");
scanf("%s",m);
for(i=0;i<length;++i)
{
if(strcmp(ar[i].name,m)==0)
{
for(j=i;j<length;j++)
{
ar[j]=ar[j+1];
}
length--;
break;
}
}
}
else if(2==k)
{
printf("--------------\n");
printf("请输入电话号码\n");
scanf("%ld",&num);
for(i=0;i<length;++i)
{
if(num==ar[i].phone)
{
for(j=i;j<length;j++)
{
ar[j]=ar[j+1];
}
length--;
break;
}
}
}
return length;
}
void find(int length,struct data ar[])
{
int i,k;
long int num;
char m[10];
printf("--------------\n");
printf("|1.按姓名查找|\n");
printf("|2.按电话号码查找|\n");
scanf("%d",&k);
if(1==k)
{
printf("--------------\n");
printf("请输入姓名\n");
scanf("%s",m);
for(i=0;i<length;++i)
{
if(strcmp(ar[i].name,m)==0)
{
printf("id:%d\t",ar[i].id);
printf("name:%s\t",ar[i].name);
printf("phone:%ld\n",ar[i].phone);
}
}
}
else if(2==k)
{
printf("--------------\n");
printf("请输入电话号码\n");
scanf("%ld",&num);
for(i=0;i<length;++i)
{
if(num==ar[i].phone)
{
printf("id:%d\t",ar[i].id);
printf("name:%s\t",ar[i].name);
printf("phone:%ld\n",ar[i].phone);
}
}
}
}
void modify(int length,struct data ar[])
{
int i,k;
long int num;
char m[10];
printf("--------------\n");
printf("|1.修改姓名|\n");
printf("|2.修改电话号码|\n");
scanf("%d",&k);
if(1==k)
{
printf("--------------\n");
printf("请输入原姓名\n");
scanf("%s",m);
for(i=0;i<length;++i)
{
if(strcmp(ar[i].name,m)==0)
{
printf("--------------\n");
printf("请输入新姓名\n");
scanf("%s",ar[i].name);
}
}
}
else if(2==k)
{
printf("--------------\n");
printf("请输入原电话号码\n");
scanf("%ld",&num);
for(i=0;i<length;++i)
{
if(num==ar[i].phone)
{
printf("--------------\n");
printf("请输入新电话号码");
scanf("%ld",&ar[i].phone);
}
}
}
}
int main()
{
int i,j,k;
int com=0;
int length =0;
struct data array[10];
while(1)
{
printf("--------------\n");
printf("|1.增加联系人|\n");
printf("|2.显示联系人|\n");
printf("|3.删除联系人|\n");
printf("|4.查找联系人|\n");
printf("|5.修改联系人|\n");
scanf("%d",&com);
switch(com)
{
case 1:
length=Add(length,array);
break;
case 2:
if(0==length)
{
printf("--------------\n");
printf("通讯录为空\n");
break;
}
show(length,array);
break;
case 3:
if(0==length)
{
printf("--------------\n");
printf("通讯录为空\n");
break;
}
length=delete(length,array);
break;
case 4:
if(0==length)
{
printf("--------------\n");
printf("通讯录为空\n");
break;
}
find(length,array);
break;
case 5:
if(0==length)
{
printf("--------------\n");
printf("通讯录为空\n");
break;
}
modify(length,array);
break;
default:
printf("输入错误!\n");
}
}
return 0;
}
贪吃蛇
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <signal.h>
#include <termios.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <pthread.h>
#define KEYCODE_U 0x41 // 向上按键
#define KEYCODE_D 0x42 // 向下按键
#define KEYCODE_L 0x44 // 向左按键
#define KEYCODE_R 0x43 // 向右按键
int kfd = 0;
struct termios cooked, raw;
char dir = KEYCODE_R; // 当前蛇的移动方向
// 获取键盘响应:上、下、左、右键
void* get_dir(void *a)
{
while(1)
{
char c;
tcgetattr(kfd, &cooked); // 得到 termios 结构体保存,然后重新配置终端
memcpy(&raw, &cooked, sizeof(struct termios));
raw.c_lflag &=~ (ICANON | ECHO);
raw.c_cc[VEOL] = 1;
raw.c_cc[VEOF] = 2;
tcsetattr(kfd, TCSANOW, &raw);
if(read(kfd, &c, 1) < 0)
{
perror("read():");
exit(-1);
}
tcsetattr(kfd, TCSANOW, &cooked);//在程序结束时在恢复原来的配置
dir = c;
}
}
unsigned char map[17][17] = {0}; // 游戏地图
unsigned char snake[50] = {55,54,53}; // 初始化蛇坐标,游戏开始的时候蛇在(8,5)这个位置
unsigned char food = 59; // 食物的坐标,游戏开始的时候在(3,3)这个位置
int len = 3; // 保存蛇的当前长度
// 将 数字 转化为坐标系
void num_to_xy(unsigned char num, unsigned char *x, unsigned char *y)
{
*x=num/17;
*y=num%17;
}
// 更新地图数据
void update_map()
{
int i,j,k;
unsigned char xsnake,ysnake;
unsigned char xfood,yfood;
num_to_xy(food,&xfood,&yfood);
for(i=0;i<17;i++)
{
for(j=0;j<17;j++)
{
if(0==i||0==j||16==i||16==j)
{
map[i][j]='#';
}
else if(xfood==i&&yfood==j)
{
map[i][j]='!';
}
else
{
map[i][j]=' ';
}
}
}
for(k=0;k<len;k++)
{
num_to_xy(snake[k],&xsnake,&ysnake);
for(i=0;i<17;i++)
{
for(j=0;j<17;j++)
{
if(i==xsnake&&j==ysnake)
{
map[i][j]='*';
}
}
}
}
}
// 打印地图
void print_map()
{
int i,j;
for(i=0;i<17;i++)
{
for(j=0;j<17;j++)
{
printf("%c",map[i][j]);
}
printf("\n");
}
}
// 生成食物
unsigned char generate_food()
{
srand(time(NULL));
int temp=1,i;
food=rand()/289;
unsigned char xfood,yfood;
num_to_xy(food,&xfood,&yfood);
while(temp)
{
temp=0;
if(0==xfood||16==xfood||0==yfood||16==yfood)
{
temp=1;
continue;
}
for(i=0;i<len;i++)
{
if(food==snake[i])
{
temp=1;
}
}
}
}
// 移动蛇
void move_snake()
{
unsigned char x,y; // 坐标
num_to_xy(snake[0], &x, &y); // 获取蛇头的坐标
int i;
unsigned char end;
// 判断移动方向
switch (dir)
{
case KEYCODE_L: // 向左移动
y--;
break;
case KEYCODE_R: // 向右移动
y++;
break;
case KEYCODE_U: // 向上移动
x--;
break;
case KEYCODE_D: // 向下移动
x++;
break;
}
end=snake[len-1];
for(i=len-1;i>0;i--)
{
snake[i]=snake[i-1];
}
snake[0]=x*17+y;
if(snake[0]==food)
{
len++;
snake[len-1]=end;
generate_food();
}
}
// 判断蛇是否应该存活,如果返回值是0代表应该存活,1代表不应该存活
int isalive()
{
int i;
int k=0;
unsigned char xtop,ytop;
num_to_xy(snake[0], &xtop, &ytop);
if(xtop==0||xtop==16||ytop==0||ytop==16)
{
k=1;
}
for(i = 1; i < len; i++)
{
if(snake[0] == snake[i])
{
k=1;
}
}
return k;
}
int main()
{
// 开启一个线程用于获取键盘的上下左右键响应
pthread_t tid1;
pthread_create(&tid1, NULL, get_dir, NULL);
while(1)
{
// 更新地图数据
update_map();
// 打印地图
system("clear");
print_map();
usleep(500000/(len/5+1));
// 移动蛇
move_snake();
if (isalive() == 1)
{
break;
}
}
tcsetattr(kfd, TCSANOW, &cooked);//在程序结束时在恢复原来的配置
printf ("Game Over!\n");
return 0;
}