c语言printf中文乱码_打字游戏框架+C语言基础+打字游戏开发

e37e72562a7a80d3a7c07d9b46e3d34f.png

一、打字游戏的框架

大循环(已知循环条件的)

1.游戏规则

2.按下任意键打印随机的字符串

按下键盘(获取键盘输入)

生成随机的字符串 20个长度

循环的生成一个随机数

打印字符串

3.按照对应的随机字符串进行输入

获取键盘的输入

如果正确就原样输出、并且++

如果错误就打印_

当第一次按下的时候我们计时

4.输入完成后会打印用时、正确率

再次记录结束时间,用时 = 结束时间-开始时间

正确率 = 正确的个数/总个数*100%

5.按下esc退出、按下空格键继续

开发思维:

写中文---非常详细的中文

二、涉及到的C语言知识

1.数据类型:

基本数据类型

构造数据类型

2.数组

3.结构体(链表上用)

4.指针

5.标准的库#include <> " "

stdio.h stdlib.h string.h sys类的

6.格式化输入输出

%s、%d、%u、%c、%p

7.函数(功能代码块)

函数的定义、函数的声明、函数的调用

函数的定义:函数的实现过程

int haha(void)
{
    printf("hahahahahan");
    return 0;//因为上面写的int,所以才返回0(整数)
}

函数的调用:就是函数的使用

1.函数名称+();表示函数的调用

2.看函数的参数,如果有参数就必须按照参数的个数和数据类型进传参

如果没有就算了

3.看函数的返回值:如果有返回值

int main()
{
    int  a = haha();//使用一个相同数据类型的变量接返回值
    int b = haha() + haha();//直接使用
    haha();//不使用
}

8.程序结构

顺序结构

循环结构

选择判断结构

9.文件操作

10.链表

11.其他:

枚举、宏定义........

三、打字游戏的开发(云开发)

需要在当前的环境中去新建一个文件,然后进行开发,写好代码之后上传到云

编译运行,看效果

注意:每次修改代码都需要,保存--上传云(覆盖)--编译---运行

请小伙伴们养成习惯:

代码规范:该换行换行、该空格的空格、该缩进的缩进、分函数、分文件、分文件夹

1.创建一个文件

2.开始敲代码(先做出一个能玩一次的)

游戏规则 -------printf标准输入输出

#include <stdio.h>//包含头文件
//头文件:函数的声明(函数如何使用)
//int              haha   (char a);
//返回值的数据类型   函数名   参数类型、参数名称
//英文单词+()表示函数,如果()后面有;就是声明或者调用
//如果后面有{}就是定义
int main(int argc, char const *argv[])
{
	//打印游戏规则
	//因为我要调用打印的函数,这个函数在stdio.h中声明了
	//所以我包含这个头文件
	printf("欢迎进入盼圆小游戏n");
	printf("进入游戏就不能中途离开n");
	
	return 0;
}

当前效果

1de5f9aba239d390311a300459ebee4a.png

按下--生成--打印

生成--按下--打印

获取键盘输入的自定义函数:(无回显、不需要回车的getchar--mygetch)

//----------------------这是一个功能代码--获取键盘 输入的一个键
//----------------------而且是无回显,而且不需要回车
#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;
}//定义处因为在整个文件的最上面,因此下面的代码中调用这个函数将不用声明  

按下任意键、生成随机的字符串、打印

#include <stdio.h>//包含头文件
#include <stdlib.h>
#include <time.h>
//头文件:函数的声明(函数如何使用)
//int              haha   (char a);
//返回值的数据类型   函数名   参数类型、参数名称
//英文单词+()表示函数,如果()后面有;就是声明或者调用
//如果后面有{}就是定义
//

//----------------------这是一个功能代码--获取键盘 输入的一个键
//----------------------而且是无回显,而且不需要回车
#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;
}//定义处因为在整个文件的最上面,因此下面的代码中调用这个函数将不用声明



int main(int argc, char const *argv[])
{
	//打印游戏规则
	//因为我要调用打印的函数,这个函数在stdio.h中声明了
	//所以我包含这个头文件
	printf("欢迎进入盼圆小游戏n");
	printf("进入游戏就不能中途离开n");

	//按下任意键
	mygetch();//只需要调用这个函数就行
	//因为我并不关系你按下的是什么因此我没有去获取,也就是接返回值
	//创建一个数组
	char haha[21] = "";//预留出一位避免乱码
	int i = 0;
	//设置随机种子
	srand(time(NULL));
	for (i = 0; i < 20; ++i)
	{
		haha[i] = rand()%26 + 'a';//循环的生成放入
	}
	printf("%sn", haha);//打印字符串
	return 0;
}
// 
// int main(int argc, char const *argv[])
// {
// 	printf("欢迎进入盼圆小游戏n");
// 	printf("进入游戏就不能中途离开n");
// 	//先生成一个随机数
// 	//设置一个随机种子
// 	srand(time(NULL));//获取当前的时间设置为随机种子
// 	int a = rand();//rand表示生成随机数函数
// 	printf("%dn", a);
// 	//然后变成随机的0-25的数
// 	int b  = a%26;//取余数一定小于本身  0-25
// 	printf("%dn", b);
// 	//再变成a-z
// 	char c = b+ 'a';//由于b是0-25,加上a字符就变成了a-z
// 	printf("%cn", c);
// 	//然后放入数组
	
// 	return 0;
// }

我们做一个能完一次的打字游戏

#include <stdio.h>//包含头文件
#include <stdlib.h>
#include <time.h>
//头文件:函数的声明(函数如何使用)
//int              haha   (char a);
//返回值的数据类型   函数名   参数类型、参数名称
//英文单词+()表示函数,如果()后面有;就是声明或者调用
//如果后面有{}就是定义
//

//----------------------这是一个功能代码--获取键盘 输入的一个键
//----------------------而且是无回显,而且不需要回车
#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;
}//定义处因为在整个文件的最上面,因此下面的代码中调用这个函数将不用声明



int main(int argc, char const *argv[])
{
	//打印游戏规则
	//因为我要调用打印的函数,这个函数在stdio.h中声明了
	//所以我包含这个头文件
	printf("欢迎进入盼圆小游戏n");
	printf("进入游戏就不能中途离开n");

	//按下任意键
	mygetch();//只需要调用这个函数就行
	//因为我并不关系你按下的是什么因此我没有去获取,也就是接返回值
	//创建一个数组
	char haha[21] = "";//预留出一位避免乱码
	int i = 0;
	//设置随机种子
	srand(time(NULL));
	for (i = 0; i < 20; ++i)
	{
		haha[i] = rand()%26 + 'a';//循环的生成放入
	}
	printf("%sn", haha);//打印字符串

	//按照打印的字符串进行输入
	//注意去掉for中的int
	int k = 0;//记录正确个数
	int s_time = 0,e_time = 0;
	for (i = 0; i < 20; ++i)
	{
		//获取键盘输入
		char ch = mygetch();
		//判断
		if (ch == haha[i])
		{
			printf("%c", ch);//原样输出
			k++;
		}
		else
			printf("_");
		if (i == 0)
			s_time = time(NULL);
		
	}
	e_time = time(NULL);
	//当前的for循环结束后
	printf("当前游戏以哦就结束n");
	printf("用时为%d秒n", e_time - s_time);
	printf("正确个数%dn", k);

	return 0;
}

效果

24aae4b2fd2e6157e08ccedff6a02007.png

拓展讲解:

//程序开始的时候打印哈哈哈哈哈
//让你按下esc退出按下空格继续
#include <stdio.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;
}//定义处因为在整个文件的最上面,因此下面的代码中调用这个函数将不用声明

int main(int argc, char const *argv[])
{
	while(1)
	{
		printf("hahahahahan");//将能够玩一次的代码替换到当前这一行就行
		//获取键盘输入
		while(1)
		{
			printf("请输入esc退出、空格继续n");
			char ch = mygetch();
			if (ch == 27)//27为esc键的ASCII码
			{
				return 0;
			}
			else if (ch == 32)//32就是空格
			{
				//结束当前层循环
				break;
			}
			printf("请按照规则按下谢谢n");
		}
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值