当前位置: 首页 > news >正文

C语言笔记23 •文件操作•

1.为什么要使用文件?

文件,顾名思义就是存储我们所写在电脑上的文本内容。如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失 了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们可以使⽤⽂件

2.什么是文件?

计算机磁盘(硬盘)上的⽂件就是⽂件。
但是在程序设计中,我们⼀般谈的⽂件有两种:程序文件、数据文件(从⽂件功能的⻆度来分类
的)。
程序文件:就是该文件里的内容在计算机的编译器中可以进行运行,笼统的可以理解为文件内容是计算机语言,C语言文件以.c结尾,python语言文件以.py结尾等等。
程序文件包括源程序文件(后缀为.c) ,目标文件(windows环境后缀为.obj) ,可执行程序(windows环境后缀为.exe)。
数据文件:文件内容一般不是程序,而是一般的文本数据,比如word文件(.doc/.docx)、文本文件(.txt)

3.流和标准流

:程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,所以中间就需要一个中间桥梁来输送它们之间的关系, 所以就把这种关系称作“流”,可以想象流淌着字符数据的河流。
C语言对文本的输入输出(读写)、画面、键盘都需要“流”来进行操作。向“流”里写入数据,还是从“流”里读取数据,需要以某种方式打开“流”,才能对数据进行操作。
标准流: 标准输入流(键盘 stdin),标准输出流(屏幕 stdout),标准错误流( stderr
stdin、stdout、stderr 三个流的类型是: FILE * ,通常称为⽂件指针。 C语⾔中,就是通过 FILE* 的⽂件指针来维护流的各种操作的。

4.文件指针

       每个被使⽤的⽂件都在内存中开辟了⼀个相应的⽂件信息区,⽤来存放⽂件的相关信息(如⽂件的名 字,⽂件状态及⽂件当前的位置等)。这些信息是保存在⼀个结构体变量中的。该结构体类型是由系统声明的,取名 FILE. 具体的可以看以下解释 

VS2013 编译环境提供的 stdio.h 头⽂件中有以下的⽂件类型(FILE)的声明:

struct _ iobuf
{
   char *_ptr;
   int _cnt;
   char *_base;
  int _flag;
  int _file;
  int _charbuf;
  int _bufsiz;
  char *_tmpfname;
};
typedef struct _ iobuf FILE ;//对  struct _ iobuf 重命名为 FILE
//不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。
⼀般都是通过⼀个FILE的指针来维护这个FILE结构的变量,这样使⽤起来更加⽅便。
FILE* pf; // ⽂件指针变量
//使pf指向某个⽂件的⽂件信息区(是⼀个结构体变量), 通过⽂件指针变量能够间接找到与
它关联的⽂件。可以看下图所示:

5.文件的打开方式

#include <stdio.h>//在txt文件里写入字符串
int main()
{FILE* pr = fopen(".\\test.txt", "w");if (pr == NULL){perror("fopen");return 1;}//写文件fputs("Hello!\n", pr);fputs("I am a boy.", pr);//关闭文件fclose(pr);pr = NULL;return 0;
}

6.文件的顺序读写函数介绍

fgetc:读取文件中单个字符,可以换行读取,用于“r”  :            

 int fgetc ( FILE * stream );

fputc:将字符串中单个字符,写到文件中,每次只能写一个,可以hun'H'n,用于“w” :

int fputc ( int character, FILE * stream );

fgets:读取文件中字符串,写在数组中,不可以换行读取,用于“r” :

char * fgets ( char * str, int num, FILE * stream );

fputs:将字符串,写在文件中,用于“w”  :

int fputs ( const char * str, FILE * stream );

fscanf:格式化输入函数,从文件中读取信息,存放到结构体的各个成员中,用于“r”

int fscanf ( FILE * stream, const char * format, ... );

fprintf:格式化输出函数,把结构体的信息写在文件里,用于“w”

int fprintf ( FILE * stream, const char * format, ... );

fread:读取二进制文件中的信息放在结构体中,用于"rb":

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

fwrite:以二进制形式写在文件中,用于"wb":

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

对应的代码看10.代码附录

7.⽂件的随机读写函数介绍

fseek 根据⽂件指针的位置和偏移量来定位⽂件指针,来读取文件中的内容。
int fseek ( FILE * stream, long int offset, int origin ); 
fseek的第三个参数(int origin)有三种模式:
SEEK_SET文件开头
SEEK_CUR文件指针的当前位置
SEEK_END文件末尾 
ftell :返回⽂件指针相对于起始位置的偏移量
long int ftell ( FILE * stream );
rewind:让⽂件指针的位置回到⽂件的起始位置
void rewind ( FILE * stream );
对应的代码看 10.代码附录

 8.文件读取结束的判定

feof:在⽂件读取过程中,不能⽤feof函数的返回值直接来判断⽂件的是否结束。当⽂件读取结束的时候,判断是读取结束的原因是否是:遇到⽂件尾结束。

int feof ( FILE * stream );

在vs2022中feof遇到结束标志EOF/NULL返回1,没遇到返回0,但是如果文件为空文件的话,则返回0,这也是文件末尾,就不能及时检测。

ferror:判断文件读取过程中是否出现错误,与feof返回值相反  读取完毕 返回0  未读取完,返回1。

int ferror ( FILE * stream );

对应的代码看10.代码附录

9.文件缓冲区

ANSIC 标准采⽤“缓冲⽂件系统” 处理的数据⽂件的,所谓缓冲⽂件系统是指系统⾃动地在内存中为 ,程序中每⼀个正在使⽤的⽂件开辟⼀块“⽂件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓 冲区,装满缓冲区后才⼀起送到磁盘上。如果从磁盘向计算机读⼊数据,则从磁盘⽂件中读取数据输 ⼊到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的大小根据C编译系统决定的。

10.代码附录

//1.在txt文件里写入字符串
int main()
{FILE* pr = fopen(".\\test.txt", "w");if (pr == NULL){perror("fopen");return 1;}//写文件fputs("Hello!\n", pr);fputs("I am a boy.", pr);//关闭文件fclose(pr);pr = NULL;return 0;
}
//2.从txt文件里读字符串
int main()
{FILE* pr = fopen(".\\test.txt", "r");if (pr == NULL){perror("fopen");return 1;}char str[20] = "xxxxxxxxx";//读文件fgets(str, 6, pr);printf("%s", str);//关闭文件fclose(pr);pr = NULL;return 0;
}
3.从键盘上读字符串  写在屏幕上
int main()
{char str[20] = "xxxxxxxxx";fgets(str, 20, stdin);//从键盘(标准输入流stdin)上读取字符串   //文本行输入函数fputs(str, stdout);将字符串写在屏幕(标准输出流stdout)上   //文本行输出函数return 0;
}
//4.把结构体的信息写在文件里
struct S
{char name[20];int age;float store;
};
int main()
{FILE* pr = fopen("test.txt", "w");if (pr == NULL){perror("fopen");return 1;}struct S s = { "zhangsan",20,88.2f };//写文件fprintf(pr,"%s %d %.1f",s.name,s.age,s.store);//格式化输出函数printf("%s %d %.1f", s.name, s.age, s.store);//关闭文件fclose(pr);pr = NULL;return 0;
}
//5.从文件中读取信息,存放到结构体的各个成员中
struct S
{char name[20];int age;float score;
};
int main()
{//打开文件FILE* pr = fopen("test.txt", "r");if (pr == NULL){perror("fopen");return 1;}struct S s = {0};//读文件fscanf(pr, "%s %d %f", s.name, &(s.age), &(s.score));//打印到屏幕上//printf("%s %d %.1f", s.name, s.age, s.score);fprintf(stdout,"%s %d %.1f", s.name, s.age, s.score);//关闭文件fclose(pr);pr = NULL;return 0;
}
//6.非文件操作函数  sscanf  sprintf 
struct S
{char name[20];int age;float score;
};
int main()
{char arr[100] = { 0 };struct S s = { "zhangnan",20,88.2f };sprintf(arr, "%s %d %.1f", s.name, s.age, s.score);//将结构体s中的各个成员数据转化为字符串存放在arr中printf("%s\n", arr);struct S t = {0};//创建结构体变量 t sscanf(arr, "%s %d %f", t.name, &(t.age), &(t.score));//将arr中的数据 提取为格式化数据  存放在结构体 t 中printf("%s %d %.1f", t.name, t.age, t.score);return 0;
}//7.以二进制形式写在文件中
struct S
{char name[20];int age;float store;
};
int main()
{//打开文件FILE* pr = fopen("test.txt", "wb");if (pr == NULL){perror("fopen");return 1;}struct S s = { "zhangsan",30,88.5f };//写文件fwrite(&s,sizeof(struct S),1,pr);//以二进制形式写在文件中printf("%s %d %.1f", s.name, s.age, s.store);//关闭文件fclose(pr);pr = NULL;return 0;
}//8.读取二进制的信息写在文件中
struct S
{char name[20];int age;float store;
};
int main()
{//打开文件struct S w = {0};FILE* pr = fopen("test.txt", "rb");if (pr == NULL){perror("fopen");return 1;}//读文件printf("%s %d %.1f\n", w.name, w.age, w.store);fread(&w, sizeof(struct S), 1, pr);//读取二进制文件中的信息写在结构体中Sleep(1000);//延迟1sprintf("%s %d %.1f", w.name, w.age, w.store);//关闭文件fclose(pr);pr = NULL;return 0;
}//9.文件的随机读写
int main()
{//打开文件FILE* pr = fopen("test.txt", "r");if (pr == NULL){perror("fopen");return 1;}//读文件int ch = 0;ch = fgetc(pr);printf("%c\n", ch);//ach = fgetc(pr);printf("%c\n", ch);//b//定位指针文件//fseek(pr, 4, SEEK_SET);//(文件开头)相对于起始位置的偏移量 //ch = fgetc(pr);//printf("%c\n", ch);//e//fseek(pr, 2, SEEK_CUR);//(文件指针的当前位置)相对于当前位置的偏移量 //ch = fgetc(pr);//printf("%c\n", ch);//efseek(pr, -2, SEEK_END);//(文件末尾位置)相对于当前位置的偏移量 ch = fgetc(pr);printf("%c\n", ch);//e  printf("%d\n", ftell(pr));//输出文件指针相较于文件的起始位置的偏移量  abcdefrewind(pr);//将文件指针重新定位到文件的起始位置ch = fgetc(pr);printf("%c\n", ch);//关闭文件fclose(pr);pr = NULL;return 0;
}//10.拷贝文件将test.txt内容拷贝到  test1.txt
int main()
{//打开文件FILE* pr = fopen("test.txt", "r");if (pr == NULL){perror("fopen\n");return 1;}FILE* pr1 = fopen("test1.txt", "w");if (pr == NULL){perror("fopen");fclose(pr);pr = NULL;return 1;}//拷贝文件开始int ch = 0;while ((ch = fgetc(pr)) != EOF){fputc(ch, pr1);}//拷贝结束printf("拷贝结束\n");//关闭文件fclose(pr);pr = NULL;fclose(pr1);pr1 = NULL;return 0;
}//11.文件读取结束判断函数(feof 读取完毕 返回1  、未读取完 返回0)
int main()
{打开文件FILE* pr = fopen("test.txt", "r");if (pr == NULL){perror("fopen\n");return 1;} int ch = 0;ch = fgetc(pr);printf("%d\n", feof(pr));  //未读取完 返回0while ((ch = fgetc(pr)) != EOF){printf("%c\n",ch);printf("%d\n", feof(pr));//未读取完 返回0}printf("===================================\n");printf("%d\n", feof(pr));  //读取完毕 返回1判断是什么造成的文件读取结束if (feof(pr))  //读取完毕 返回1  未读取完 返回0{printf("feof:文件内容读取完\n");return 1;}else if (ferror(pr))  //与feof返回值相反  读取完毕 返回0  未读取完 返回1{printf("ferror:文件读取过程中出现错误\n");return -1;}关闭文件fclose(pr);pr = NULL;return 0;
}//12.文件缓冲区(文件拷贝查看缓冲区现象)
int main()
{FILE* p = fopen("test.txt", "w");fputs("abcdef", p);//将字符串 abcdef. 写入 p→test.txtprintf("睡眠10秒-已经写数据了,打开test.txt文件,发现文件没有内容\n");Sleep(10000);printf("刷新缓冲区\n");fflush(p);//刷新缓冲区时,才将输出缓冲区的数据写到文件(磁盘)//注:fflush 在高版本的VS上不能使用了printf("再睡眠10秒-此时,再次打开test.txt文件,文件有内容了\n");Sleep(10000);fclose(p);//注:fclose在关闭文件的时候,也会刷新缓冲区p = NULL;return 0;
}

相关文章:

C语言笔记23 •文件操作•

1.为什么要使用文件&#xff1f; 文件&#xff0c;顾名思义就是存储我们所写在电脑上的文本内容。如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失 了&#xff0c;等再次运⾏程序&#x…...

新项目来了,JDK 17和JDK 21 该如何选择?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …...

友顺科技(UTC)分立器件与集成IC产品选型和应用

友顺科技股份有限公司成立于1990年&#xff0c;是全球领先的集成电路与功率半导体厂商 ,集团总部位于台北&#xff0c;生产基地位于福州、厦门。 友顺科技具有完整模拟组件产品线&#xff0c;其中类比IC涵盖各种稳压器、PWM控制IC, 放大器、比较器、逻辑IC、Voltage Translato…...

并发与多线程:创建多个线程,数据共享

数据共享问题分析 1. 只读的数据&#xff1a;安全稳定的&#xff0c;不需要特殊处理&#xff1b; 2. 又读又写的数据&#xff1a;2个线程写&#xff0c;8个线程读&#xff0c;写不好程序会崩。 c11并发于多线程_2章_4节_哔哩哔哩_bilibili...

【机器学习数据挖掘】基于ARIMA 自回归积分滑动平均模型的销售价格库存分析报告 附完整python代码

资源地址&#xff1a;Python数据分析大作业 4000字 图文分析文档 销售分析 完整python代码 ​ 完整代码分析 同时销售量后1000的sku品类占比中&#xff08;不畅销产品&#xff09;如上&#xff0c;精品类产品占比第一&#xff0c;达到66.7%&#xff0c;其次是香化类产品&#…...

LightGBM 进行回归建模的流程

LightGBM 进行回归建模的流程 文章最前&#xff1a; 我是Octopus&#xff0c;这个名字来源于我的中文名–章鱼&#xff1b;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github &#xff1b;这博客是记录我学习的点点滴滴&#xff0c;如果您对 Python、Java、AI、算法有…...

【Linux】多进程基础--信号

文章目录 信号常见信号信号定时函数 信号 发生事件时通过信号向进程进行通知&#xff0c;在软件层次上模拟中断&#xff0c;也叫软件中断&#xff0c;处理优先级较高对于前台进程可以通过特殊的字符发送信号&#xff0c;例如CtrlC即给当前进程发送一个SIGINT中断信号。kill命令…...

若依项目部署(Linux2.0)

解压jdk tar -zxvf jdk-8u151-linux-x64.tar.gz 配置Java环境变量&#xff1a; vim /etc/profile 设置环境变量生效&#xff1a; source /etc/profile 查看一下jdk版本&#xff1a; java -version 解压tomcat tar -zxvf apache-tomcat-8.5.20.tar.gz 防火墙设置&#xff1a; …...

python小练习03

1.绘制奥运五环旗 #奥运五环的绘制 import turtle as t t.pensize(3) t.speed(0) def draw_circles():i0while i <4:args [[-60,0,"blue"],[0,0,"black"],[60,0,"red"],[-30,-30,"yellow"],[30,-30,"green"]]#定义一个…...

【机器学习】机器学习在深度学习领域中的作用:半监督学习的视角

&#x1f440;时空之门&#x1f440; &#x1f50d;引言&#x1f388;半监督学习概述&#x1f69d;机器学习在深度学习领域中的作用☘特征提取与表示学习&#x1f340;复杂任务建模❀结合半监督学习提升性能 &#x1f680;半监督学习在深度学习中的应用场景&#x1f4d5;图像识…...

C#WPF数字大屏项目实战01--开发环境与项目创建

1、学习目标 -界面布局 &#xff0c;- 模板调整&#xff0c;- 控件封装&#xff0c;- 图表&#xff0c;- 通信对接&#xff0c;- 动态更新 2、开发环境 开发工具&#xff1a;Visual Studio-2022-17.8.6-Community 运行时框架&#xff1a;.Net 6或Framework 4.5以上 UI框…...

python中字符串的各类方法

大小写转换方法 upper() 用于将字符串中的小写字母转为大写字母。 abcd.upper() # ABCD aBcD.upper() # ABCD lower() 用于将字符串中的大写字母转为小写字母。 ABCD.lower() # abcd aBcD.lower() # abcd capitalize() 用于将字符串的第一个字母变成大写&#xff0…...

DataGrip 数据库连接客户端

I DataGrip 安装 1.1安装 打开dmg镜像&#xff0c;将“DataGrip.app”拖入应用程序中&#xff1b; 1.2 Act 打开应用程序,点击试用模式启动软件&#xff0c;然后将“jetbrains-agent-latest”拖到任意位置&#xff0c;然后拖入&#xff0c;弹出对话框&#xff0c;点击“Rest…...

JS片段:生成 UUID

Hi&#xff0c;这里是松桑&#xff0c;每天学习一个 JS 片段&#xff0c;涨涨&#x1f9c0;&#xff01;今天带来的是如何生成 UUID&#xff0c;UUID作为全局唯一标识&#xff0c;使用常见广泛&#xff0c;包括分布式系统、数据库主键、会话标识、消息队列、日志追踪等等。 什么…...

小学数学出题器-Word插件-大珩助手

Word大珩助手是一款功能丰富的Office Word插件&#xff0c;旨在提高用户在处理文档时的效率。它具有多种实用的功能&#xff0c;能够帮助用户轻松修改、优化和管理Word文件&#xff0c;从而打造出专业而精美的文档。 【新功能】小学数学出题器 1、实现了难度设定&#xff1b;…...

短剧平台源码:打造个性化娱乐体验的核心功能

在数字化媒体的浪潮中&#xff0c;短剧平台源码扮演着至关重要的角色&#xff0c;它不仅是构建短剧平台的技术基础&#xff0c;更是提供个性化娱乐体验的关键。本文将深入探讨短剧平台源码的核心功能&#xff0c;包括推荐短剧、本周热门/热播、个性化推荐、追剧功能、观看历史、…...

【MySQL】MySQL 图形化界面 - 使用说明(MySQL Workbench)

一、安装软件 Navicat&#xff0c;SQLyog 这些软件都不错&#xff0c;不过都需要收费&#xff0c;当然也有破解版。下面用 MySQL Workbench&#xff0c;它是官方提供的工具。 二、使用操作 这个软件本质是一个客户端&#xff0c;现在要让数据库能够远程登录。不过一般不会远程…...

Shell 编程之免交互

一、Here Document 语法格式&#xff1a; 命令 << 标记 ...... ...... 标记 1.用wc -l的命令统计输入的文字的行数 [rootlocalhost ~]# wc -l <<EOF > aaa > bbb > ccc > EOF 3 备注&#xff1a; 显示行数。 2.整体赋值给变量&#xff0c;通过ech…...

github有趣项目:Verilog在线仿真( DigitalJS+edaplayground)

DigitalJS https://github.com/tilk/digitaljs这个项目是一个用Javascript实现的数字电路模拟器。 它旨在模拟由硬件设计工具合成的电路 像 Yosys&#xff08;这里是 Github 存储库&#xff09;&#xff0c;它有一个配套项目 yosys2digitaljs&#xff0c;它可以转换 Yosys 将文…...

性能测试学习-基本使用-元件组件介绍(二)

jmeter优点是&#xff1a;开源免费&#xff0c;小巧&#xff0c;丰富的学习资料和扩展组件 缺点是&#xff1a;1.不支持IP欺骗&#xff0c;分析和报表能力相对于LR欠缺精确度&#xff08;以分钟为单位&#xff09; 工具用户量分析报表IP欺骗费用体积扩展性Loadrunner多(万)精…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁

赛门铁克威胁猎手团队最新报告披露&#xff0c;数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据&#xff0c;严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能&#xff0c;但SEMR…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...

shell脚本质数判断

shell脚本质数判断 shell输入一个正整数,判断是否为质数(素数&#xff09;shell求1-100内的质数shell求给定数组输出其中的质数 shell输入一个正整数,判断是否为质数(素数&#xff09; 思路&#xff1a; 1:1 2:1 2 3:1 2 3 4:1 2 3 4 5:1 2 3 4 5-------> 3:2 4:2 3 5:2 3…...