#include <stdio.h>
#include<string.h>
#include <unistd.h> //头文件
/*char mygetch() //功能函数的定义
{
struct termios oldt, newt;
char ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}//定义处因为在整个文件的最上面,因此下面的代码中调用这个函数将不用声明
*/
//Linux下键盘输入函数相当于scanf;
void fun();
int main(int argc, char const *argv[])
{
while(1)
{
char h[21]="";//定义字符串
srand(time(NULL));//获取当前的时间设置为随机种子
printf("欢迎来到游戏\n");
//mygetch();
printf("按下1开始难度为容易的游戏\n");
printf("按下2开始难度为中档的游戏\n");
printf("按下3开始难度为难的游戏\n");
int nandu;
//nandu=mygetch();
scanf("%d\n",&nandu);
if(nandu== 1)
{
// int a = rand();//rand表示生成随机数函数
//printf("%d\n", a);
// int b = a%26;//取余数一定小于本身 0-25
//printf("%d\n", b);
//char c = b+ 'a';//由于b是0-25,加上a字符就变成了a-z
//printf("%c\n", c);
int i;
for(i=0;i<20;++i)
{
h[i]=rand()%26+'a';
}
printf("%s\n",h);
}
if(nandu== 2)
{
// int a = rand();//rand表示生成随机数函数
//printf("%d\n", a);
// int b = a%26;//取余数一定小于本身 0-25
//printf("%d\n", b);
int panduan;
int i;
for(i=0;i<20;++i)
{
panduan=rand()%2;//0-1
if(panduan==0)
{
h[i]=rand()%26+'a';//a=z
}
else
h[i]=rand()%26+'A';//A=Z
}
printf("%s\n",h);
}
if(nandu== 3)
{
// int a = rand();//rand表示生成随机数函数
//printf("%d\n", a);
// int b = a%26;//取余数一定小于本身 0-25
//printf("%d\n", b);
int panduan;
int i;
for(i=0;i<20;++i)
{
panduan=rand()%3;//0-2
if(panduan==0)
{
h[i]=rand()%26+'a';//a=z
}
if(panduan==1)
{
h[i]=rand()%26+'A';//A=Z
}
else
h[i]=rand()%10+'0';
}
printf("%s\n",h);
}
int k = 0;//记录正确个数
int s_time = 0,e_time = 0;
int l;
for (l = 0; l < 20; ++l)
{
//获取键盘输入
//char ch = mygetch();
char ch;
scanf("%c\n",&ch);
//判断
if (ch == h[l])
{
printf("%c", ch);//原样输出
k++;
}
else
printf("_");
if (l == 0)
s_time = time(NULL);
}
e_time = time(NULL);
//当前的for循环结束后
printf("当前游戏结束\n");
printf("用时为%d秒\n", e_time - s_time);
printf("正确个数%d\n", k);
/*while(1)
{
printf("请输入esc退出、空格继续\n");
//char ch = mygetch();
char sh;
scanf("%c\n",&sh);
if (sh == 27)//27为esc键的ASCII码
{
return 0;
}
else if (sh == 32)//32就是空格
{
//结束当前层循环
break;
}
printf("请按照规则按下谢谢\n");
}*/
//利用指针判断循环主函数
fun();
}
return 0;
}
//子函数控制主函数循环
void fun()
{
printf("请输入esc退出、空格继续\n");
//char ch = mygetch();
char sh;
scanf("%c\n",&sh);
if (sh == 27)//27为esc键的ASCII码
{
return 0;
}
else if (sh == 32)//32就是空格
{
//结束当前层循环
return 1;
}
printf("请按照规则按下谢谢\n");
}
或者用while来循环
#include <stdio.h>
#include<string.h>
#include <unistd.h> //头文件
/*char mygetch() //功能函数的定义
{
struct termios oldt, newt;
char ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}//定义处因为在整个文件的最上面,因此下面的代码中调用这个函数将不用声明
*/
//Linux下键盘输入函数相当于scanf;
int main(int argc, char const *argv[])
{
while(1)
{
char h[21]="";//定义字符串
srand(time(NULL));//获取当前的时间设置为随机种子
printf("欢迎来到游戏\n");
//mygetch();
printf("按下1开始难度为容易的游戏\n");
printf("按下2开始难度为中档的游戏\n");
printf("按下3开始难度为难的游戏\n");
int nandu;
//nandu=mygetch();
scanf("%d\n",&nandu);
if(nandu== 1)
{
// int a = rand();//rand表示生成随机数函数
//printf("%d\n", a);
// int b = a%26;//取余数一定小于本身 0-25
//printf("%d\n", b);
//char c = b+ 'a';//由于b是0-25,加上a字符就变成了a-z
//printf("%c\n", c);
int i;
for(i=0;i<20;++i)
{
h[i]=rand()%26+'a';
}
printf("%s\n",h);
}
if(nandu== 2)
{
// int a = rand();//rand表示生成随机数函数
//printf("%d\n", a);
// int b = a%26;//取余数一定小于本身 0-25
//printf("%d\n", b);
int panduan;
int i;
for(i=0;i<20;++i)
{
panduan=rand()%2;//0-1
if(panduan==0)
{
h[i]=rand()%26+'a';//a=z
}
else
h[i]=rand()%26+'A';//A=Z
}
printf("%s\n",h);
}
if(nandu== 3)
{
// int a = rand();//rand表示生成随机数函数
//printf("%d\n", a);
// int b = a%26;//取余数一定小于本身 0-25
//printf("%d\n", b);
int panduan;
int i;
for(i=0;i<20;++i)
{
panduan=rand()%3;//0-2
if(panduan==0)
{
h[i]=rand()%26+'a';//a=z
}
if(panduan==1)
{
h[i]=rand()%26+'A';//A=Z
}
else
h[i]=rand()%10+'0';
}
printf("%s\n",h);
}
int k = 0;//记录正确个数
int s_time = 0,e_time = 0;
int l;
for (l = 0; l < 20; ++l)
{
//获取键盘输入
//char ch = mygetch();
char ch;
scanf("%c\n",&ch);
//判断
if (ch == h[l])
{
printf("%c", ch);//原样输出
k++;
}
else
printf("_");
if (l == 0)
s_time = time(NULL);
}
e_time = time(NULL);
//当前的for循环结束后
printf("当前游戏结束\n");
printf("用时为%d秒\n", e_time - s_time);
printf("正确个数%d\n", k);
while(1)
{
printf("请输入esc退出、空格继续\n");
//char ch = mygetch();
char sh;
scanf("%c\n",&sh);
if (sh == 27)//27为esc键的ASCII码
{
return 0;
}
else if (sh == 32)//32就是空格
{
//结束当前层循环
break;
}
printf("请按照规则按下谢谢\n");
}
}
return 0;
}
在Linux中编码:
用VMnat链接主机,代码如下:
虚拟机的状态:nat\桥接
- 将虚拟机设置为nat模式
- 将虚拟机的网络设置IPV6设置为
IP:192.168.1.66
子网掩码:255.255.255.0
网关:192.168.1.254
DNS服务器:192.168.1.1
设置之后点击上下箭头(网络连接)连接刚刚创建的nat——显示nat已经连接成功就可以了
- 设置一下主机电脑的网络配置(虚拟网卡)
打开网络和共享中心
更改适配器选项,选择VM8,单击右键属性—ipv4
Samba服务器:Windows+r
在运行中输入\192.168.1.66,有个share文件夹,是虚拟机的共享文件夹。
输入用户名和密码就进入文件夹
打开Sublime Text3,打开share文件夹
在share文件新建一个zzuli文件夹,在Sublime Text3中打开zzuli文件夹。
我们使用Sublime Text3,zzuli中新建文件
,设置一个标题=zzuli.c(.c表明是c文件)。
代码如下:
#include <stdio.h>
#include<string.h>
#include <termios.h>
#include <unistd.h> //头文件
char mygetch() //功能函数的定义
{
struct termios oldt, newt;
char ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}//定义处因为在整个文件的最上面,因此下面的代码中调用这个函数将不用声明
//Linux下键盘输入函数相当于scanf;
int main(int argc, char const *argv[])
{
while(1)
{
char h[21]="";//定义字符串
srand(time(NULL));//获取当前的时间设置为随机种子
printf("欢迎来到游戏\n");
mygetch();
printf("按下1开始难度为容易的游戏\n");
printf("按下2开始难度为中档的游戏\n");
printf("按下3开始难度为难的游戏\n");
int nandu;
nandu=mygetch();
//scanf("%d\n",&nandu);
if(nandu== '1')
{
// int a = rand();//rand表示生成随机数函数
//printf("%d\n", a);
//int b = a%26;//取余数一定小于本身 0-25
//printf("%d\n", b);
//char c = b+ 'a';//由于b是0-25,加上a字符就变成了a-z
//printf("%c\n", c);
int i;
for(i=0;i<20;++i)
{
h[i]=rand()%26+'a';
}
printf("%s\n",h);
}
if(nandu== '2')
{
// int a = rand();//rand表示生成随机数函数
//printf("%d\n", a);
// int b = a%26;//取余数一定小于本身 0-25
//printf("%d\n", b);
int panduan;
int i;
for(i=0;i<20;++i)
{
panduan=rand()%2;//0-1
if(panduan==0)
{
h[i]=rand()%26+'a';//a=z
}
else
h[i]=rand()%26+'A';//A=Z
}
printf("%s\n",h);
}
if(nandu== '3')
{
// int a = rand();//rand表示生成随机数函数
//printf("%d\n", a);
// int b = a%26;//取余数一定小于本身 0-25
//printf("%d\n", b);
int panduan;
int i;
for(i=0;i<20;++i)
{
panduan=rand()%3;//0-2
if(panduan==0)
{
h[i]=rand()%26+'a';//a=z
}
if(panduan==1)
{
h[i]=rand()%26+'A';//A=Z
}
else
h[i]=rand()%10+'0';
}
printf("%s\n",h);
}
int k = 0;//记录正确个数
int s_time = 0,e_time = 0;
int l;
for (l = 0; l < 20; ++l)
{
//获取键盘输入
char ch = mygetch();
//char ch;
//scanf("%c\n",&ch);
//判断
if (ch == h[l])
{
printf("%c", ch);//原样输出
k++;
}
else
printf("_");
if (l == 0)
s_time = time(NULL);
}
e_time = time(NULL);
//当前的for循环结束后
printf("当前游戏结束\n");
printf("用时为%d秒\n", e_time - s_time);
printf("正确个数%d\n", k);
while(1)
{
printf("请输入esc退出、空格继续\n");
char sh = mygetch();
//char sh;
//scanf("%c\n",&sh);
if (sh == 27)//27为esc键的ASCII码
{
return 0;
}
else if (sh == 32)//32就是空格
{
//结束当前层循环
break;
}
printf("请按照规则按下谢谢\n");
}
}
return 0;
}
开发思维:(打字游戏)
先去玩这个游戏、写中文流程、写代码
需要着重掌握的内容:
C语言的灵活使用:
数据类型:(你需要什么就定义什么)
17677565621
char *a = “17677565621”;//指针,字符串是文字常量,文字常量区、可读不可写
char b[20] = “17677565621”;//字符数组
我们按照需求使用
int、char、char * [ ]
数组:(有固定个数、相同数据类型、连续排放)
数组的定义:
int a[10] ;//英文单词+[ ]结合表示数组,【】内的是数组的元素个数 最前面的是元素数据类型
数组、整型,读的时候从后往前读,整型数组,其本质就是数组(后面的)
什么叫做指针数组?数组,每个元素是指针
什么叫做数组指针?指针,就是数组的地址
数组名称的意义:
数组的名称表示数组的首地址,在数值上等于第零个元素的地址
数组名称+1跳过整个数组,数组第0个元素+1,跳过一个元素
char haha[10] = “”;//初始化的时候使用空的字符串
char xixi[ 5 ] = “haha”;//字符串最后一位是\0所以是5个元素
如果上面的写4,大多数不会出问题(系统),它默认给你扩了一位,但是给你用不属于你
【】内写大于等于4的都可以
指针:指针就是地址,在定义的时候有*,在使用的时候被&取地址
&和*:
int a = 10; int b = &a; int &c = a;//表示c是a的一个引用,也就是别名 printf("%d\n",b);//打印a本身的值
在使用的时候&表示取地址,在定义的时候表示引用
在使用的时候表示取内容,在定义的时候表示指针
&和的意义:
&在使用时候表示取地址,这个整体会在原有的数据类型基础上进行+*
在使用时候表示取内容,这个整体会在原有的数据类型基础上进行-
int b = &a;//a–int,&a—int printf("%d\n",b);//b—int *b----int
多级指针、野指针、指针的意义(参数传递的三种方式)
多级指针:低级指针给高级指针赋值的时候会报错误
高级指针给低级指针赋值的时候会报警告
参数传递的三种方式:
值传递:
指针传递:
引用传递:就是将你一个引用传递进去,相当于把变量本身传递进去了
函数的调用:
1.函数名称+();就是函数调用,除非特殊情况没有;
#include <stdio.h> int haha(int x) { x++; return x; } int main(int argc, char const *argv[]) { haha(haha(10)); return 0; }
2.如果函数有参数就必须按照参数的个数及数据类型进行对应的传参
如果没有参数就算了
3.如果函数有返回值
你可以使用一个相同数据类型的变量去接返回值
也可以直接使用
也可以不使用
如果没有返回值就算了