用200行C语言代码实现贪吃蛇——2.0(EasyX基本版)

article/2025/10/23 10:35:37

1.前言

这个版本使用了EasyX图形库,使动画效果更加丰富,更加接近真实的小游戏。当然这个“小游戏”并不是真正意义上的小游戏,只是个人对C语言的一些理解与应用。本人水平不高,通过博客来分享自己的学习成果,也算是一种复习。

如果大家不知道什么是EasyX图形库,或者说不知道怎么安装、怎么使用,大家可以去网络上搜索一下。安装过程非常简单,使用起来仅仅针对于贪吃蛇这个项目而言,只需要引头文件,和使用头文件里面的库函数。与#include <stdio.h>然后使用printf函数没什么区别。

需要注意的是,EasyX图形库之适用于C++,但我们可以用C语言的语法。意思就是说,我们需要创建的文件必须是cpp的格式,但我们可以用C的语法。

2.游戏效果

在1.0版本中,我们是在控制台窗口下运行的。并且运用到数组。通过数组的状态来描绘空地、食物、蛇的。并且黑框框影响美观、并不好看。并且因为用到了system("cls")清屏,所以屏幕会一卡一卡抽搐,非常影响视觉。

但是在2.0版本中,我们运用了EasyX图形库,这就使得我们不通过控制台那个黑框框来输出图像,而是用EasyX图形库里面的库函数。上下两个GIF动图都是60FPS,但是不难发现2.0版本无论是动画、还是灵敏度,都要优于1.0。

 3.设计思路

3.1界面设置

我们先将需要的头文件写在head.h头文件底下。

#define _CRT_SECURE_NO_WARNINGS 1
#include <easyx.h>//EasyX图形库头文件
#include <stdio.h>

随后我们在主函数main.cpp底下操作。

#include "head.h"
int main()
{initgraph(640, 480);//初始化窗口大小,现在为640*480分辨率setbkcolor(RGB(255, 148, 209));//设置背景色cleardevice();//使用背景色清屏//防闪退getchar();closegraph();return 0;
}

 那么我们就得到:

 3.2绘制一条蛇出来

在绘制蛇之前先讲一个知识点。

 这个窗口是有 x、y轴的,并且值增加的方向跟箭头同向。意思就是说,越往右边,x越大;越往下面,y越大。

由此分析,蛇不能够像1.0版本那样用数组来描绘状态了,需要用坐标来描绘蛇。

我们在头文件head.h下定义蛇的结构体,因为需要使用坐标,也同时定义一个坐标结构体:

#define _CRT_SECURE_NO_WARNINGS 1
#include <easyx.h>//EasyX图形库头文件
#include <stdio.h>#define NUM 200//默认蛇有200个坐标//坐标的结构体
struct Coor
{int x;int y;
};//蛇的结构体
struct Snake
{//蛇结构包括int len;//长度int direc;//方向Coor cr[NUM];//坐标//一条蛇有N节,每节都有自己的坐标,所以定义一个坐标数组
};

现在蛇的结构已经弄好,接下来就要初始化,也就是把蛇放在哪个位置。

我们在源文件mian.cpp中进入初始化:

#include "head.h"
int main()
{initgraph(640, 480);//初始化窗口大小,现在为640*480分辨率setbkcolor(RGB(255, 148, 209));//设置背景色cleardevice();//使用背景色清屏Init_Game();//初始化//防闪退getchar();closegraph();return 0;
}

在头文件head.h中的部分函数声明与宏定义:

#define _CRT_SECURE_NO_WARNINGS 1
#include <easyx.h>//EasyX图形库头文件
#include <stdio.h>#define NUM 200//默认蛇有200个坐标//宏定义各个方向。与1.0不同的是,本版本使用方向键控制的
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77//坐标的结构体
struct Coor
{int x;int y;
};//蛇的结构体
struct Snake
{//蛇结构包括int len;//长度int direc;//方向Coor cr[NUM];//坐标//一条蛇有N节,每节都有自己的坐标,所以定义一个坐标数组
};void Init_Game();//初始化函数声明

 现在需要在源文件function.cpp中配置初始化函数:

#include "head.h"Snake snake;//创建蛇的结构体变量
void Init_Game()
{snake.len = 3;//初始化长度snake.direc = RIGHT;//初始化方向//初始化蛇头坐标snake.cr[0].x = 100;snake.cr[0].y = 100;//蛇身坐标snake.cr[1].x = 90;snake.cr[1].y = 100;snake.cr[2].x = 80;snake.cr[2].y = 100;
}

现在有了蛇的详细信息,就要开始着手在窗口把蛇绘制出来了,我们从主函数进入绘制函数:

#include "head.h"int main()
{initgraph(640, 480);//初始化窗口大小,现在为640*480分辨率setbkcolor(RGB(255, 148, 209));//设置背景色cleardevice();//使用背景色清屏Init_Game();//初始化Draw_Game();//绘制//防闪退getchar();closegraph();return 0;
}

要在头文件中进行函数声明,但是这里省略。

现在需要在function.cpp中配置绘制函数:

void Draw_Game()
{for (int i = 0; i < snake.len; i++){if (i == 0)//如果是蛇头{setfillcolor(RED);//填充颜色为红色//绘制实心矩形,填充颜色为红色fillrectangle(snake.cr[i].x, snake.cr[i].y, snake.cr[i].x + SIZE, snake.cr[i].y + SIZE);//这里的SIZE我在头文件head.h中宏定义为10了//四个参数为:    x坐标           y坐标           宽                       高}elserectangle(snake.cr[i].x, snake.cr[i].y, snake.cr[i].x + SIZE, snake.cr[i].y + SIZE);//绘制非实心矩形}
}

那么绘制出来的效果就是这样:

 3.3蛇移动的实现

我们在初始化中,让蛇的移动方向为右。

现在我们需要分析蛇是如何移动的。

 

我们现在需要通过源文件main.cpp进入移动函数。注意:移动与绘制,是一个循环过程。

#include "head.h"int main()
{initgraph(640, 480);//初始化窗口大小,现在为640*480分辨率setbkcolor(RGB(255, 148, 209));//设置背景色cleardevice();//使用背景色清屏Init_Game();//初始化while (1){Move_Snake();//移动蛇Draw_Game();//绘制Sleep(100);}//防闪退getchar();closegraph();return 0;
}

在头文件head.h中要引用Sleep函数的头文件,以及移动蛇的函数声明。这里省略。

最后在源文件function.cpp中配置移动蛇函数:


void Move_Snake()
{cleardevice();//以当前背景色清屏for (int i = snake.len-1; i > 0; i--){snake.cr[i].x = snake.cr[i - 1].x;snake.cr[i].y = snake.cr[i - 1].y;}//数组下标是从 0~n-1 的,所以从i=snake.len-1开始。为什么i要>0而不是>=0//是因为在循环里面的语句中,有i-1的操作。最后一次是把snake.cr[0]的坐标给snake.cr[1],如果写>=0,就会产生把 snake.cr[-1]的坐标给snake.cr[0]//蛇头的坐标没有了,现在要产生新的蛇头坐标switch (snake.direc){case UP:snake.cr[0].y -= SIZE;break;case DOWN:snake.cr[0].y += SIZE;break;case LEFT:snake.cr[0].x -= SIZE;break;case RIGHT:snake.cr[0].x += SIZE;break;}
}

现在实现了蛇向右移动的功能,那么效果是这样的:

 

现在我们需要控制蛇的方向。我们从源文件main.cpp进入控制蛇的函数:

#include "head.h"int main()
{initgraph(640, 480);//初始化窗口大小,现在为640*480分辨率setbkcolor(RGB(255, 148, 209));//设置背景色cleardevice();//使用背景色清屏Init_Game();//初始化while (1){if (_kbhit())//如果键盘被敲击就进入控制方向函数Change_Move();//控制蛇else{Move_Snake();//移动蛇Draw_Game();//绘制Sleep(100);}}//防闪退getchar();closegraph();return 0;
}

 我们需要在头文件head.h中定义_kbhit函数的头文件以及控制蛇的函数声明。这里省略。

现在要在源文件function.cpp中配置控制蛇函数:

void Change_Move()
{int key = 0;key = _getch();//接收键盘值switch (key){case UP:if (snake.direc != DOWN)//如果蛇正在往下,就不能改变方向。snake.direc = UP;break;case DOWN:if (snake.direc != UP)//如果蛇正在往上,就不能改变方向。snake.direc = DOWN;break;case LEFT:if (snake.direc != RIGHT)//如果蛇正在往右,就不能改变方向snake.direc = LEFT;break;case RIGHT:if (snake.direc != LEFT)//如果蛇正在往左,就不能改变防线snake.direc = RIGHT;break;}
}

 那么实现的效果是这样的:

3.4食物的生成

食物的生成很简单:第一次初始化生成,我们可以在初始化函数中完成。后续就是蛇吃掉食物后再随机生成。

需要注意的是:我们的蛇是以10为单位移动的,并且每一节的大小都是10*10。我们的食物也要匹配蛇的大小。 

判断食物被是否被吃掉非常简单,只要判断蛇头与食物的坐标是否重合就行。

但是我们难就难在定义食物。

在1.0版本中,我们用数组描绘食物的状态。

但是在本版本中,需要使用结构体,因为食物也包含坐标。

所以这里在头文件head.h中定义食物的结构体(包含上面省略的头文件和函数声明):

#define _CRT_SECURE_NO_WARNINGS 1
#include <easyx.h>//EasyX图形库头文件
#include <stdio.h>
#include <windows.h>//Sleep头文件
#include <conio.h>//kbhit、getch头文件
#define NUM 200//默认蛇有200个坐标//宏定义各个方向。与1.0不同的是,本版本使用方向键控制的
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77#define SIZE 10
//坐标的结构体
struct Coor
{int x;int y;
};//蛇的结构体
struct Snake
{//蛇结构包括int len;//长度int direc;//方向Coor cr[NUM];//坐标//一条蛇有N节,每节都有自己的坐标,所以定义一个坐标数组
};//食物的结构体
struct Food
{//因为食物它永远只有一个,所以不需要数组int x;int y;int eat;//确定是否被吃
};
void Init_Game();//初始化函数声明
void Draw_Game();//绘制蛇函数声明
void Move_Snake();//蛇移动函数声明
void Change_Move();//控制蛇函数声明

 我们要在源文件function.cpp中对食物初始化:

#include "head.h"Snake snake;//创建蛇的结构体变量
Food food;//创建食物的结构体变量
void Init_Game()
{snake.len = 3;//初始化长度snake.direc = RIGHT;//初始化方向//初始化蛇头坐标snake.cr[0].x = 100;snake.cr[0].y = 100;//蛇身坐标snake.cr[1].x = 90;snake.cr[1].y = 100;snake.cr[2].x = 80;snake.cr[2].y = 100;food.eat = 1;//初始化食物是被吃的}

在绘制之前我们需要定义一下食物的坐标在哪,也就是需要在源文件main.cpp中进入创建食物函数:

定义好了食物的坐标,现在又要回到绘制函数把食物绘制出来:

void Draw_Game()
{for (int i = 0; i < snake.len; i++){if (i == 0)//如果是蛇头{setfillcolor(RED);//填充颜色为红色//绘制实心矩形,填充颜色为红色fillrectangle(snake.cr[i].x, snake.cr[i].y, snake.cr[i].x + SIZE, snake.cr[i].y + SIZE);//这里的SIZE我在头文件head.h中宏定义为10了//四个参数为:    x坐标           y坐标           宽                       高}elserectangle(snake.cr[i].x, snake.cr[i].y, snake.cr[i].x + SIZE, snake.cr[i].y + SIZE);//绘制非实心矩形}//绘制食物setfillcolor(GREEN);//填充颜色为绿色fillroundrect(food.x, food.y, food.x + SIZE, food.y + SIZE, 5, 5);//圆角矩形//6个参数为:  x坐标   y坐标      宽              高       这两个是圆角的程度
}

此时的运行效果就是这样的:

 3.5吃食物以及蛇身加长

这个部分非常简单。

我们先从源文件main.cpp中进入判断是否吃到食物函数:

#include "head.h"int main()
{initgraph(640, 480);//初始化窗口大小,现在为640*480分辨率setbkcolor(RGB(255, 148, 209));//设置背景色cleardevice();//使用背景色清屏Init_Game();//初始化srand((unsigned int)time(NULL));while (1){if (_kbhit())//如果键盘被敲击就进入控制方向函数Change_Move();//控制蛇else{Produce_Food();//创建食物Eat_Food();//判断食物是否被吃Move_Snake();//移动蛇Draw_Game();//绘制Sleep(100);}}//防闪退getchar();closegraph();return 0;
}

我们需要在头文件head.h下进行函数声明。这里省略。

随后在源文件function.cpp中配置是否被吃函数:

void Eat_Food()
{if (snake.cr[0].x == food.x && snake.cr[0].y == food.y)//如果蛇头的位置是食物{food.eat = 1;//食物的状态更新为被吃snake.len += 1;//蛇身长度+1}
}

3.6判断蛇头是否撞墙或自己

这个模块与1.0版本一摸一样,判断函数都需要一个变量来接收返回值。

我们在源文件main.cpp中观察逻辑:

#include "head.h"int main()
{initgraph(640, 480);//初始化窗口大小,现在为640*480分辨率setbkcolor(RGB(255, 148, 209));//设置背景色cleardevice();//使用背景色清屏Init_Game();//初始化srand((unsigned int)time(NULL));int n = 0;while (1){if (_kbhit())//如果键盘被敲击就进入控制方向函数Change_Move();//控制蛇else{Produce_Food();//创建食物Eat_Food();//判断食物是否被吃n = GameOver();//判断蛇头是否撞墙或自己if (n == 1)//返回1则撞墙或自己{closegraph();//关闭窗口printf("游戏结束\n");//控制台打印break;//结束循环}else{Move_Snake();//移动蛇Draw_Game();//绘制Sleep(100);}}}//防闪退getchar();closegraph();return 0;
}

我们需要在头文件head.h下进行函数声明。这里省略。

然后就是在源文件funtion.cpp中配置函数:

int GameOver()
{if (snake.cr[0].x < 0 || snake.cr[0].y < 0 || snake.cr[0].x>640 || snake.cr[0].y>480)//如果撞墙{return 1;//返回1}for (int i = 1; i < snake.len; i++) {if (snake.cr[0].x == snake.cr[i].x && snake.cr[0].y == snake.cr[i].y)//如果撞自己return 1;//返回1}return 0;//否则返回0
}

4.完整代码

4.1头文件head.h

#define _CRT_SECURE_NO_WARNINGS 1
#include <easyx.h>//EasyX图形库头文件
#include <stdio.h>
#include <windows.h>//Sleep头文件
#include <conio.h>//kbhit、getch头文件
//srand函数需要的头文件
#include <stdlib.h>
#include <time.h>#define NUM 200//默认蛇有200个坐标//宏定义各个方向。与1.0不同的是,本版本使用方向键控制的
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77#define SIZE 10
//坐标的结构体
struct Coor
{int x;int y;
};//蛇的结构体
struct Snake
{//蛇结构包括int len;//长度int direc;//方向Coor cr[NUM];//坐标//一条蛇有N节,每节都有自己的坐标,所以定义一个坐标数组
};//食物的结构体
struct Food
{//因为食物它永远只有一个,所以不需要数组int x;int y;int eat;//确定是否被吃
};
void Init_Game();//初始化函数声明
void Draw_Game();//绘制蛇函数声明
void Move_Snake();//蛇移动函数声明
void Change_Move();//控制蛇函数声明
void Produce_Food();//创建食物的函数声明
void Eat_Food();//食物是否被吃的函数声明
int GameOver();//判断是否撞墙或自己的函

4.2源文件main.cpp

#include "head.h"int main()
{initgraph(640, 480);//初始化窗口大小,现在为640*480分辨率setbkcolor(RGB(255, 148, 209));//设置背景色cleardevice();//使用背景色清屏Init_Game();//初始化srand((unsigned int)time(NULL));int n = 0;while (1){if (_kbhit())//如果键盘被敲击就进入控制方向函数Change_Move();//控制蛇else{Produce_Food();//创建食物Eat_Food();//判断食物是否被吃n = GameOver();//判断蛇头是否撞墙或自己if (n == 1)//返回1则撞墙或自己{closegraph();//关闭窗口printf("游戏结束\n");//控制台打印break;//结束循环}else{Move_Snake();//移动蛇Draw_Game();//绘制Sleep(100);}}}//防闪退getchar();closegraph();return 0;
}

4.3源文件function.cpp

#include "head.h"Snake snake;//创建蛇的结构体变量
Food food;//创建食物的结构体变量
void Init_Game()
{snake.len = 3;//初始化长度snake.direc = RIGHT;//初始化方向//初始化蛇头坐标snake.cr[0].x = 100;snake.cr[0].y = 100;//蛇身坐标snake.cr[1].x = 90;snake.cr[1].y = 100;snake.cr[2].x = 80;snake.cr[2].y = 100;food.eat = 1;//初始化食物是被吃的}void Draw_Game()
{for (int i = 0; i < snake.len; i++){if (i == 0)//如果是蛇头{setfillcolor(RED);//填充颜色为红色//绘制实心矩形,填充颜色为红色fillrectangle(snake.cr[i].x, snake.cr[i].y, snake.cr[i].x + SIZE, snake.cr[i].y + SIZE);//这里的SIZE我在头文件head.h中宏定义为10了//四个参数为:    x坐标           y坐标           宽                       高}elserectangle(snake.cr[i].x, snake.cr[i].y, snake.cr[i].x + SIZE, snake.cr[i].y + SIZE);//绘制非实心矩形}//绘制食物setfillcolor(GREEN);//填充颜色为绿色fillroundrect(food.x, food.y, food.x + SIZE, food.y + SIZE, 5, 5);//圆角矩形//6个参数为:  x坐标   y坐标      宽              高       这两个是圆角的程度
}void Move_Snake()
{cleardevice();//以当前背景色清屏for (int i = snake.len-1; i > 0; i--){snake.cr[i].x = snake.cr[i - 1].x;snake.cr[i].y = snake.cr[i - 1].y;}//数组下标是从 0~n-1 的,所以从i=snake.len-1开始。为什么i要>0而不是>=0//是因为在循环里面的语句中,有i-1的操作。最后一次是把snake.cr[0]的坐标给snake.cr[1],如果写>=0,就会产生把 snake.cr[-1]的坐标给snake.cr[0]//蛇头的坐标没有了,现在要产生新的蛇头坐标switch (snake.direc){case UP:snake.cr[0].y -= SIZE;break;case DOWN:snake.cr[0].y += SIZE;break;case LEFT:snake.cr[0].x -= SIZE;break;case RIGHT:snake.cr[0].x += SIZE;break;}
}void Change_Move()
{int key = 0;key = _getch();//接收键盘值switch (key){case UP:if (snake.direc != DOWN)//如果蛇正在往下,就不能改变方向。snake.direc = UP;break;case DOWN:if (snake.direc != UP)//如果蛇正在往上,就不能改变方向。snake.direc = DOWN;break;case LEFT:if (snake.direc != RIGHT)//如果蛇正在往右,就不能改变方向snake.direc = LEFT;break;case RIGHT:if (snake.direc != LEFT)//如果蛇正在往左,就不能改变防线snake.direc = RIGHT;break;}
}void Produce_Food()
{int func = 0;//用来判断食物的坐标是否与蛇的坐标重合if (food.eat == 1){while (1){food.x = rand() % 64 * 10;//rand()%64的区间在0~63,再*10可实现坐标以10为间隔生成坐标   0  10  20...food.y = rand() % 48 * 10;//rand()%48的区间在0~46,再*10可实现坐标以10为间隔生成坐标   0  10  20...for (int i = 0; i < snake.len; i++){if (food.x == snake.cr[i].x && food.y == snake.cr[i].y){func = 1;//如果但凡有坐标重合,func改变为1,表重合break;//退出for循环}}if (func == 0)//如果没有重合{food.eat = 0;//食物就要变为未被吃的状态break;}}}
}void Eat_Food()
{if (snake.cr[0].x == food.x && snake.cr[0].y == food.y)//如果蛇头的位置是食物{food.eat = 1;//食物的状态更新为被吃snake.len += 1;//蛇身长度+1}
}int GameOver()
{if (snake.cr[0].x < 0 || snake.cr[0].y < 0 || snake.cr[0].x>640 || snake.cr[0].y>480)//如果撞墙{return 1;//返回1}for (int i = 1; i < snake.len; i++) {if (snake.cr[0].x == snake.cr[i].x && snake.cr[0].y == snake.cr[i].y)//如果撞自己return 1;//返回1}return 0;//否则返回0
}


http://chatgpt.dhexx.cn/article/Z5QFI4ts.shtml

相关文章

C语言,234行代码控制台贪吃蛇

结果图&#xff1a; 先上全代码: #include <stdio.h> #include <Windows.h>//移动光标 #include <stdlib.h> #include <time.h>//使用时间戳创建随机数种子 #include <conio.h>//监听键盘#define WIDE 50//定义地图宽度 #define HIGH 28//定义地…

贪吃蛇c语言源代码彩色版,贪吃蛇C语言源代码

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include typedef struct snake { int a; int b; struct snake *u; struct snake *n; }snake,*snake1; typedef struct food { int a; int b; }food; void main() { char c,c0 d; int i,j,k,n1,t,at;…

C语言贪吃蛇游戏代码,贪吃蛇C语言代码实现大全

一、C语言贪吃蛇代码实现前言 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础&#xff0c;训练编程思维&#xff0c;培养解决问题的思路&#xff0c;领略多姿多彩的C语言。 贪吃蛇是非常经典的一款游戏&#xff0c;本次我们模拟在控制台实现贪吃蛇游戏&#xff0c;也就是实现…

C语言入门项目篇:贪吃蛇(完整代码+详细注释)

C语言入门项目篇:贪吃蛇 可直接运行。 #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <time.h> #include <conio.h> /*大一上的时候C语言入门学的一个小游戏。还是挺有意思的&#xff0c;有兴趣的同学可以继续优化下&…

完整!贪吃蛇游戏c语言代码分享(包括界面,计数,提示)

最近看到身边有些朋友抱怨&#xff0c;网上的贪吃蛇项目完整源码太少&#xff0c;或者说运行不了&#xff0c;甚至还有花钱购买的情况&#xff0c;作为你们的过来人&#xff0c;学长了解你们期末考试的苦&#xff0c;今天的博客我就不啰嗦&#xff0c;我直接放代码给你们。 所有…

C7-如何学好C语言

1&#xff1a;必须实践--敲代码 2&#xff1a;画图理解--内存布局 3&#xff1a;调试&#xff01;调试&#xff01; 课本推荐&#xff1a;

学好C语言从关键字开始

目录 1、C语言数据类型 2、变量的命名规则 3、最冤枉的关键字——sizeof 4、signed和unsigned 原、反、补 深入理解变量内容的存入和取出 大小端 1、C语言数据类型 在学习C语言数据类型之前&#xff0c;我们得先了解&#xff1a;为什么要有类型&#xff1f; 类型为什…

【c语言】如何学好c语言?c语言应该怎么去学?

大家好&#xff0c;我是想要慢慢变得优秀的向阳同学&#xff0c;谢谢大家的支持&#xff01;让我这个菜鸟博主可以有非常开心的收获1000的浏览量和200的粉丝&#xff01;我也会不断努力去持续分享一下高质量的博客内容的&#xff01;再次感谢大家的支持&#xff01;如果觉得我的…

python open函数编码_python中的open函数如何编码?

python中的open函数可以通过在打开文件时添加encoding参数来指定使用的编码方式&#xff0c;encoding表示的是返回的数据采用何种编码。 open()的函数原型&#xff1a;open(file, mode‘r, buffering-1, encodingNone, errorsNone, newlineNone, closefdTrue) 从官方文档中我…

open函数和 write函数

问题 Python内置多种函数与第三方库&#xff0c;本文对python中的open()函数和 write函数进行简单的讲解。 方法 open()函数 open()函数用于创建或打开指定文件&#xff0c;该函数的常用语法格式: open(name[,mode[,buffering]]) name : 要创建或打开文件的文件名称&#xff0c…

python open函数用法_Python使用open函数打开文件的常用模式

python 中open()的用法? open("/path/to/my/image.png", "rb") 中的‘rb’代表了什么意思?所有试图感动你而做的事,最终都只感动了小编自己。 r表示只读,b表示二进制 与此对应的是w表示可写,t表示文本方式打开。 再增加一些官方的解释: >>>…

linux中open函数详解

1、open函数 包含头文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> open函数有两个参数和三个参数 int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); Pathname:要打开的文件名…

python open函数默认路径_Python open函数打开文件路径

要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符,标示符r表示读。 >>> f = open(D:/test.txt,r) 注意了,对初学python的同学而言,open()函数着实存在一个不大不小的坑,而且十分不容易发现。 错误演示: >>> f = open…

linux open详解,Linux系统open函数详解

Linux系统中open函数主要作用就是打开和创建文件,可以根据参数来定制我们需要的文件的属性和用户权限等各种参数,下面良许教程网为大家分享一下Linux系统open函数具体使用方法。 一、open函数用来干什么 open函数在Linux下一般用来打开或者创建一个文件,我们可以根据参数来定…

第9.2节 Python的文件打开函数open详解

一、 引言 在操作一个文件前&#xff0c;大部分情况需要先打开文件&#xff0c;才能进行&#xff0c;在Python中使用内置函数open来打开一个文件。open函数是Python的一个内置函数&#xff0c;io模块 定义的函数open是该内置函数的同义词&#xff08;这是Python官网中关于io.op…

Python open 函数

open 函数语法 open() 函数的作用是打开一个文件,并返回一个 file对象(即文件对象)。 open 是一个动作,可以理解为我们打开文档的点击动作。 file 对象是一个实物,可以理解为我们打开的具体文档,例如记事本、表格、Word 或其他具体的文档。 open() 函数的语法为: f =…

Linux 文件IO学习之open函数深入了解

open()函数是在学习文件IO中的第一个函数。作用是打开一个文件&#xff0c;或者创建出一个文件。 需要注意的是&#xff0c;能实现这样功能的函数其实有两套&#xff0c;一个是系统IO所提供的open()函数&#xff0c;一个是标准IO提供的fopen()函数。(二者对比放在最后) 先看看…

Python open函数详解

演示环境&#xff0c;操作系统&#xff1a;Win10 21H2&#xff08;64bit&#xff09;&#xff1b;Python解释器&#xff1a;3.8.10。 open是Python的一个内置函数&#xff0c;一般用于本地文件的读写操作。用法如下。 my_file open(file, mode, buffering, encoding, errors…

sql去重查询

背景&#xff1a; 项目有消息推送&#xff0c;根据消息推送记录&#xff0c;筛选出一共有哪几种消息类型&#xff0c;并且标题和文本是什么 表部分结构如图&#xff1a; 主要是根据subject来去重所有数据&#xff0c;难点是&#xff0c;使用distinct的话&#xff0c;无法显示…

sql 去重查询 distinct

sql 去重查询 select Distinct UserId,Name from UserInfo where UserType1 介绍 distinct一般是用来去除查询结果中的重复记录的&#xff0c;而且这个语句在select、insert、delete和update中只可以在select中使用&#xff0c; 具体的语法如下&#xff1a; select distinc…