C语言实现入门级小游戏——三子棋

article/2025/8/23 15:29:31

       今天博主将为大家带来C语言入门级小游戏——三子棋(井字棋)的详细介绍,希望这篇文章对大家能有帮助 。  

 

52097dc5234ef58c44a82ae338bdde9d.png

    在编程的学习过程中,编写一些中这样的小游戏,是非常有乐趣的事情,完成之后会非常非常有成就感,我们需要这样的小项目来提高对编程学习的信心,培养对编程的兴趣,由于博主是一个编程学习的小白,所以这只是三子棋的初级版,此版本只能实现人机对战,并且电脑随机下棋电脑的算法比较低级,在后续的学习中,我会持续更新,不断对这个小游戏进行优化,期待大家的关注,还有,这篇文章中若有错误或不当的地方,欢迎大家指正! 

关于这个项目的代码,欢迎访问我的gitee代码仓库:

 Living_Amethyst/code2021 - Gitee.com

  那么正文开始咯!

 

目录

一.游戏的整体思路

二.创建游戏菜单 

三.游戏主体的实现 

1.棋盘的初始化 

2.打印棋盘 

3.玩家下棋 

4.电脑自动下棋 

5.游戏胜负的判断

四.全部的代码 

五.游戏的运行实况 


一.游戏的整体思路

为了让代码的可读性更高,思维性更强,我们需要创建三个文件来完成这个项目

  1. test.c   —— 测试游戏
  2. game.h—— 游戏函数的声明
  3. game.c—— 游戏函数的实现

二.创建游戏菜单 

作为游戏,菜单是肯定少不了的,这里我们也为三子棋小游戏准备了游戏的菜单

由于一进入游戏,我们首先就要看到菜单,所以这里我们采用do...while循环

我们的菜单需要实现的功能有:

  1. 游戏的进入
  2. 游戏的退出
  3.  非法输入的返回提示和说明
void menu()
{printf("************************\n");printf("*****   1.play   *******\n");printf("*****   0.exit   *******\n");printf("************************\n");}
void test()
{int input = 0;do{menu();printf("请选择");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误\n");break;}} while (input);
}
int main()
{test();return 0;
}

  这里我们创建了test函数和menu函数,为的是让逻辑更清晰,现在我们的菜单部分就完成了

对于这个游戏菜单,我们能实现的游戏功能有: 

  • 输入1进入游戏
  • 输入0退出游戏
  • 输入其他数字提示选择错错误,将重新输入

 watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATGl2aW5nX0FtZXRoeXN0,size_8,color_FFFFFF,t_70,g_se,x_16

 

 

                                             这是菜单的运行效果

 

 

三.游戏主体的实现 

1.棋盘的初始化 

9e66544929fb4a4b84d80aadba84cbab.png

    这张图大概就是棋盘的样子,为了实现棋盘,我们需要用到二维数组,在下棋时,我们要将数据存储到一个字符的二维数组中,我们设定玩家下棋是 ' * ',电脑下棋是 ‘ # ’

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATGl2aW5nX0FtZXRoeXN0,size_20,color_FFFFFF,t_70,g_se,x_16

  通过这个函数,我们实现了棋盘的初始化,我们给数组中每个元素初始化为一个空格

代码如下 

 

char board[ROW][COL] = { 0 };
//函数声明
void InitBoard(char board[ROW][COL], int row, int col);
//函数定义
void InitBoard(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i = 0;i < row; i++){for (j = 0;j < col;j++){board[i][j] = ' ';}}
}
//函数调用
InitBoard(board, ROW, COL);

   这里有一个小细节,在数组的初始化过程中,我并没有在[ ]中输入具体的数字,而是用ROW,COL取代,这是因为通过这样操作,我们可以用define定义它们为常量,这样如果我们想修改成五子棋或n子棋,就不用一个一个改了,直接在define定义常量时修改即可 

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATGl2aW5nX0FtZXRoeXN0,size_11,color_FFFFFF,t_70,g_se,x_16

 280b94cdaf6b4bf5a3d242c59ec840e5.png

 

2.打印棋盘 

 对棋盘的打印,我我们使用DisplayBoard这一函数来实现,代码如下:

//函数声明
void DisplayBoard(char board[ROW][COL], int row, int col);
//函数定义
void DisplayBoard(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i = 0;i < row;i++){//数据for (j = 0;j < col;j++){printf(" %c ", board[i][j]);if(j < col-1)printf("|");}printf("\n");//分割行if (i < row - 1)  //第三行数据不用打印分割行{for (j = 0;j < col;j++){printf("---");if(j<col-1)printf("|");}printf("\n");}}
}
//函数调用
DisplayBoard(board,ROW,COL);

 值得一提的是,在函数调用部分我们一开始写的代码并不是这个,而是

void DisplayBoard(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i = 0;i < row;i++){//数据printf(" %c | %c | %c \n", board[i][0],board[i][1],board[i][2]);//分割行if (i < row - 1)  //第三行数据不用打印分割行{printf("---|---|---\n");}

但很快,我们就发现了这个代码的局限性

         版本1,不方便代码的改动,如要打印10*10的棋盘,无法完成,只能10*3,也就是我们把这个代码写死了

所以我们做了如下的改动,希望大家好好体会两者的区别

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATGl2aW5nX0FtZXRoeXN0,size_20,color_FFFFFF,t_70,g_se,x_16

下面展示一下棋盘打印出来的效果! 

 6eb113bc8a44449bb9cc7e34072d9a57.png

 

 是不是有点那个意思了?

 

 

 

3.玩家下棋 

接下来我们来实现玩家下棋这一功能。

为了完成这一功能,我们需要注意以下几点: 

  1. 接收玩家所输入的地址位置(我们所判断的数组元素应该是玩家输入值-1
  2. 判断玩家所输入的地址所在是否已有落子
  3. 将玩家的棋子落入对应处

代码如下:

//函数的声明
void player_move(char board[ROW][COL],int row,int col);
//函数的定义
void player_move(char board[ROW][COL], int row, int col)
{printf("玩家下棋:\n");int x = 0;int y = 0;while (1){scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col){if (board[x - 1][y - 1] == ' '){board[x - 1][y - 1] = '*';break;}else{printf("该坐标被占用,请重新输入!\n");}}else{printf("坐标非法!请重新输入\n");}}
}
//函数的调用//玩家下棋player_move(board,ROW,COL);//棋下完要打印DisplayBoard(board, ROW, COL);ret = is_win(board, ROW, COL);

4.电脑自动下棋 

与前面的玩家下棋类似,只是这里我们需要电脑随机下棋,所以我们要用到rand函数获取随机值

我们需要创建随机数,这就需要调用以下头文件:

<stdlib.h>
<time.h>

同时,我们还需要使用: 

srand((unsigned int)time(NULL)); 来进行初始化
x = rand() % row;
y = rand() %  col;     来进行创建坐标的随机数 

 代码实现如下

//函数的声明
void player_move(char board[ROW][COL],int row,int col);//函数的定义
void computer_move(char board[ROW][COL], int row, int col){int x = 0;int y = 0;printf("电脑下棋\n");while (1){x = rand() % ROW;//取余数3后范围是0~2y = rand() % COL;//0~2if (board[x][y] == ' '){board[x][y] = '#';break;}}}
//函数的调用//电脑下棋computer_move(board, ROW, COL);DisplayBoard(board, ROW, COL); //用时间戳生成随机数
srand((unsigned int)time(NULL));

5.游戏胜负的判断

在我们下棋的过程中,由于规则的特殊性,我们需要在玩家和电脑下的每一步后都对比赛的结果进行判断,确保程序的逻辑正确性。

在这里,我们使用 Is_win()函数 来实现这一功能。

在这一函数中,我们需要实现以下四个逻辑:

  1. 返回四种不同的状态
  2. 玩家赢     :  返回'*'
  3. 电脑赢     :  返回'#'
  4. 平局         :  返回'Q'
  5. 游戏继续  :  返回'C'

首先我们要确立判断函数再整个游戏主体中的位置和作用,逻辑如下:

void game()
{//数据存储到一个字符的二维数组中,玩家下棋是' * ',电脑下棋是' # ' ,char board[ROW][COL] = { 0 };//数组的内容应该是全部空格(二维数组初始化一般是{})//初始化棋盘InitBoard(board, ROW, COL);//打印棋盘DisplayBoard(board,ROW,COL);//下棋char ret = is_win(board, ROW, COL);while (1){//玩家下棋player_move(board,ROW,COL);//棋下完要打印DisplayBoard(board, ROW, COL);ret = is_win(board, ROW, COL);if (ret != 'C'){break;}//电脑下棋computer_move(board, ROW, COL);DisplayBoard(board, ROW, COL); ret = is_win(board, ROW, COL);if (ret != 'C'){break;} }if (ret == '*'){printf("玩家赢\n");}else if (ret == '#'){printf("电脑赢\n");}else{printf("平局\n");}}

 

我们在实现Iswin()这一函数时,需要注意以下几点

  1. 判断行
  2. 判断列
  3. 判断对角线
  4. 判断棋盘是否已经放满   -- >  确认游戏是否继续(需要一个Is_full()函数来实现这一功能)

以下是Is-win()函数的实现:

char is_win(char board[ROW][COL], int row, int col){//三行int i = 0;for (i = 0;i < row;i++){if (board[i][0] == board[i][1]&&board[i][1]==board[i][2]&&board[i][1]!=' '){return board[i][1];}}//三列for (i = 0;i < col;i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' '){return board[1][i];}}//对角线相同if (board[0][0] == board[1][1]&&board[1][1] == board[2][2] && board[1][1] != ' '){return board[1][1];}if (board[0][2] == board[1][1]&&board[1][1] == board[2][0] && board[1][1] != ' '){return board[1][1];}//判断平局if ( is_full(board, row, col)==1){return 'Q';}//继续return 'C';}

 这个代码的缺陷是也只适用于三子棋,后续会进行改进

下面时is_full函数的实现

int is_full(char board[ROW][COL],int row,int col){int i = 0;int j = 0;for (i = 0;i < row;i++){for (j = 0;j < col;j++){if (board[i][j] == ' '){return 0;}}}return 1;}

最后再看一下游戏整体的逻辑实现

void game()
{//数据存储到一个字符的二维数组中,玩家下棋是' * ',电脑下棋是' # ' ,char board[ROW][COL] = { 0 };//数组的内容应该是全部空格(二维数组初始化一般是{})//初始化棋盘InitBoard(board, ROW, COL);//打印棋盘DisplayBoard(board,ROW,COL);//下棋char ret = is_win(board, ROW, COL);while (1){//玩家下棋player_move(board,ROW,COL);//棋下完要打印DisplayBoard(board, ROW, COL);ret = is_win(board, ROW, COL);if (ret != 'C'){break;}//电脑下棋computer_move(board, ROW, COL);DisplayBoard(board, ROW, COL); ret = is_win(board, ROW, COL);if (ret != 'C'){break;} }if (ret == '*'){printf("玩家赢\n");}else if (ret == '#'){printf("电脑赢\n");}else{printf("平局\n");}}

四.全部的代码 

game.h—— 游戏函数的声明

#include<stdio.h>
#include<time.h>
#include<stdlib.h>#define ROW 3
#define COL 3//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col);//打印棋盘
void DisplayBoard(char board[ROW][COL], int row, int col);//玩家下棋
void player_move(char board[ROW][COL],int row,int col);//电脑下棋
void computer_move(char board[ROW][COL], int row, int col);//判断输赢的代码
//玩家赢- '*'
//电脑赢- '#'
//平局---'Q'
//继续---'C'
char is_win(char board[ROW][COL], int row, int col);
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"void InitBoard(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i = 0;i < row; i++){for (j = 0;j < col;j++){board[i][j] = ' ';}}
}// (把每一格看成一组数据,一组一组地打印)
//这样代码的可扩展性就高了
void DisplayBoard(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i = 0;i < row;i++){//数据for (j = 0;j < col;j++){printf(" %c ", board[i][j]);if(j < col-1)printf("|");}printf("\n");//分割行if (i < row - 1)  //第三行数据不用打印分割行{for (j = 0;j < col;j++){printf("---");if(j<col-1)printf("|");}printf("\n");}}
}//玩家下棋
void player_move(char board[ROW][COL], int row, int col)
{printf("玩家下棋:\n");int x = 0;int y = 0;while (1){scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col){if (board[x - 1][y - 1] == ' '){board[x - 1][y - 1] = '*';break;}else{printf("该坐标被占用,请重新输入!\n");}}else{printf("坐标非法!请重新输入\n");}}
}//电脑下棋void computer_move(char board[ROW][COL], int row, int col){int x = 0;int y = 0;printf("电脑下棋\n");while (1){x = rand() % ROW;//取余数3后范围是0~2y = rand() % COL;//0~2if (board[x][y] == ' '){board[x][y] = '#';break;}}}int is_full(char board[ROW][COL],int row,int col){int i = 0;int j = 0;for (i = 0;i < row;i++){for (j = 0;j < col;j++){if (board[i][j] == ' '){return 0;}}}return 1;}char is_win(char board[ROW][COL], int row, int col){//三行int i = 0;for (i = 0;i < row;i++){if (board[i][0] == board[i][1]&&board[i][1]==board[i][2]&&board[i][1]!=' '){return board[i][1];}}//三列for (i = 0;i < col;i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' '){return board[1][i];}}//对角线相同if (board[0][0] == board[1][1]&&board[1][1] == board[2][2] && board[1][1] != ' '){return board[1][1];}if (board[0][2] == board[1][1]&&board[1][1] == board[2][0] && board[1][1] != ' '){return board[1][1];}//判断平局if ( is_full(board, row, col)==1){return 'Q';}//继续return 'C';}

 test.c   —— 测试游戏

#define _CRT_SECURE_NO_WARNINGS#include"game.h"
void menu()
{printf("************************\n");printf("*****   1.play   *******\n");printf("*****   0.exit   *******\n");printf("************************\n");}
void game()
{//数据存储到一个字符的二维数组中,玩家下棋是' * ',电脑下棋是' # ' ,char board[ROW][COL] = { 0 };//数组的内容应该是全部空格(二维数组初始化一般是{})//初始化棋盘InitBoard(board, ROW, COL);//打印棋盘DisplayBoard(board,ROW,COL);//下棋char ret = is_win(board, ROW, COL);while (1){//玩家下棋player_move(board,ROW,COL);//棋下完要打印DisplayBoard(board, ROW, COL);ret = is_win(board, ROW, COL);if (ret != 'C'){break;}//电脑下棋computer_move(board, ROW, COL);DisplayBoard(board, ROW, COL); ret = is_win(board, ROW, COL);if (ret != 'C'){break;} }if (ret == '*'){printf("玩家赢\n");}else if (ret == '#'){printf("电脑赢\n");}else{printf("平局\n");}}void test()
{int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误\n");break;}} while (input);
}
int main()
{test();return 0;
}

 

 

 

五.游戏的运行实况 

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATGl2aW5nX0FtZXRoeXN0,size_10,color_FFFFFF,t_70,g_se,x_16

你看,这个电脑玩家是不是有点不太聪明的样子~

    其实,电脑的”聪明程度“取决于我们程序员的技术水平程度,如果我们给电脑设计更优秀的算法,那它也会更聪明哦 

 


 以上就是三子棋游戏的全部内容,相信大家看到这里应该也能够独立的完成属于自己专有的三子棋游戏了,也相信你在这过程中对编程有了更进一步的认知。

好了,这篇文章就到这里了,欢迎大家点赞评论哦! 

 

 

 

 


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

相关文章

【C语言小游戏】猜数字游戏

hello&#xff0c;csdn的小伙伴呢&#xff0c;在前面&#xff0c;我们已经初步了解了c语言&#xff0c;并且系统的学习了分支与循环的内容。今天我们就将分支与循环的内容综合应用一下&#xff0c;来做一个很简单猜数字小游戏。 目录 程序的需求以及最终代码展示 一、实现打印…

C语言学习推荐---小游戏

文章目录 控制台文字游戏srand、rand、time猜拳游戏 控制台动作游戏运动的小球贪吃蛇 音乐图形界面easyx介绍 后续 学习c语言的时候&#xff0c;想写例子&#xff0c;但是课后习题又太枯燥怎么办&#xff1f; 写小游戏可以锻炼我们的编程抽象能力和思维&#xff0c;而且比较有趣…

c语言入门级小游戏·飞机(1.0版)| 激发你的编程兴趣(50~100行代码)

目录 制作一个可移动的飞机 发射激光 设置一个可击中的障碍物 完整代码 声明&#xff1a;本游戏参考《c语言课程设计与游戏开发实践教程》。 先来放一个效果图 怎么样&#xff0c;真的是新手级别吧&#xff1f; &#xff08;效果视频c语言练习草稿_game1.2.5飞机-CSDN直播…

C语言小游戏之扫雷完整版

C语言小游戏之扫雷 一.游戏介绍二.游戏步骤及实现的功能1.初始化雷盘2.打印雷盘3.随机布置雷4.玩家排雷5.防止玩家第一次被炸死6.统计所选位置周围八个位置中雷的个数7.递归拓展已选位置周围的区域8.标记雷及取消标记 一.游戏介绍 看到这张图片&#xff0c;相信很多小伙伴都非常…

C初阶必写的C语言小游戏—扫雷,一看就会,看完就能写

目录 一.前言二.资源环境的配置三.游戏整体构思1.游戏的开始与结束(菜单)2.创建二维数组用来布置雷和排查雷的信息3.初始化棋盘4.打印棋盘5.布置雷6.排查雷 四.所有代码及效果展示 一.前言 人尽皆知的扫雷小游戏&#xff0c;原理简单&#xff0c;写法也简单&#xff0c;我会通…

c语言代码怎样制作成一个游戏?

游戏背景 《球球大作战》是Superpop一款自主研du发的免费手机网络游戏。 以玩家间的实时互动PK产生游戏乐趣为设计宗旨&#xff0c;通过简单的规则将玩家操作直接转化为游戏策略&#xff0c;体验智谋碰撞的战斗乐趣。 游戏的基本操作包括键盘按下&#xff08;上下左右四个方向…

[ C语言 ] 用C语言实现小游戏 ---- 三子棋 代码 + 解析

前言 本篇文章记录了用C语言实现三子棋小游戏&#xff0c;主要目的是对之前C语言知识学习的巩固&#xff0c;联系各个知识&#xff0c;以及怎么样实际使用各个知识。 一、三子棋的游戏规则 玩家将会看到一个3X3的网格棋盘&#xff0c;默认玩家先下棋&#xff0c;电脑后下棋。 …

一个好玩的小游戏(纯C语言编写)

最近在看知乎是发现了一个这一个专栏 https://zhuanlan.zhihu.com/c2game 从中获取的许多知识&#xff0c;本文中的游戏也是从里面学到的&#xff0c;不过本人又自己加了一些功能。 这是一个类似于飞机大战的游戏&#xff0c;不过目前代码量比较小&#xff0c;所以看起来非常…

【用游戏学C语言】几个基本的小游戏的实现(缓慢更新中~)

目录 ​更新说明 前言 1.相关函数的简单介绍&#xff08;预备知识&#xff09; &#xff08;1&#xff09;关于函数getch() &#xff08;2&#xff09;关于函数system() &#xff08;3&#xff09;关于函数sleep() &#xff08;4&#xff09;关于函数kbhit() &#xff…

【C语言】游戏项目:《疯狂赛车》,每个人都要加油活下去

序 交换一个苹果&#xff0c;得到一个苹果&#xff1b;交换一种思想&#xff0c;得到一种思想。选择与你才干&#xff0c;性格不同的人&#xff0c;他可以弥补你的缺陷。 嗨&#xff01;这里是狐狸~~ 最近有点网抑云了&#xff0c;脑子很乱&#xff0c;不晓得想些什么&#…

Qt学习之QFile和QFileInfo

Qt项目中对文件操作是必不可少的。顾名思义&#xff1a;QFile是文件对象类&#xff0c;QFileInfo是文件信息对象类&#xff0c;结合例子我们看一下用法。 读的文件内容如下&#xff0c;以字符 “#” 或者 “;” 开始的为注释行。 [Extern_Item1] ;名称 Namelibccgext_cvi_64.so…

QT5 QFile读/写文件操作方法

文档打开读/写操作命令说明 值描述QIODevice::NotOpen未打开QIODevice::ReadOnly以只读方式打开QIODevice::WriteOnly以只写方式打开QIODevice::ReadWrite以读写方式打开QIODevice::Append以追加的方式打开&#xff0c;新增加的内容将被追加到文件末尾QIODevice::Truncate以重…

qt5之QFile读写文件

1、效果 读写文件用到的是QFile类&#xff0c; 这里&#xff0c;我显示文件内容用到的是 QTextEdit 2、创建打开和关闭按钮 // 打开文件btnOpenFile new QToolButton;btnOpenFile->setText(tr("open a file"));btnOpenFile->setToolTip(tr("open …

Qt 创建文件 用QFile和QDir类

项目需求是 根据日期创建多级子文件夹, 根目录保存 log.txt 控制台程序实现 如下执行结果 createFile 为程序目录 文档结构: 源码: #include <QtCore/QCoreApplication> #include <QDir> #include <QFile> #include <QDebug> #include <QDateTim…

QFile(文件)

QFile QFile提供一个用于读/写的接口&#xff0c;是一个可以用来读/写二进制文件的Qt资源的I/O设备&#xff0c;QFile可以单独使用&#xff0c;一般配合QTextStream或QDataStream 输入文件路径时最好使用"/"作为分隔符 构造函数&#xff1a; 常用的函数&#xff1a;…

QFileDialog

一、描述 QFileDialog 类使用户能够遍历文件系统以选择一个或多个文件或目录。 创建 QFileDialog 最简单的方法是使用静态函数&#xff1a; fileName QFileDialog::getOpenFileName(this, tr("Open Image"), "/home/jana", tr("Image Files (*.p…

Qt -- QFile文件读写操作

对于文件的读写操作&#xff0c;C 和 C 都各有一套方式。而在 Qt 中也有一套&#xff0c;即使用 QFile 对文件进行读和写操作。 文件的打开方式 文件路径说明&#xff1a;&#xff08;windows-release编译&#xff09; QFile *file new QFile("EcgCap.dat");表示这…

[QT_032]Qt学习之基本文件读写QFile

本文转自&#xff1a;《Qt编程指南》 作者&#xff1a;奇先生 Qt编程指南&#xff0c;Qt新手教程&#xff0c;Qt Programming Guide 7.2 基本文件读写QFile Qt 常见的文件读写类有三个 QFile、QTextStream 和 QDataStream&#xff0c;本节先概要介绍这三个文件读写类&…

QFileInfo

一、描述 QFileInfo 提供有关文件系统中文件的名称和位置&#xff08;路径&#xff09;、访问权限、文件类型等信息。 FileInfo 还可用于获取有关 Qt 资源的信息。这个类是隐式共享的。 二、成员函数 2.1、判断函数 1、bool isAbsolute() 文件路径是否绝对路径。 注意&am…

QFile详解(文件如果不存在则创建、判断文件是否存在、获得文件的各种详细信息、读写文件)

目录 一、QFile文件如果不存在则创建的方法 二、QFile判断文件是否存在的方法 三、QFileInfo的方法获得文件的各种详细信息 四、QFile读写文件的内容 一、QFile文件如果不存在则创建的方法 QFile f("./1234.ini");if(!f.open(QIODevice::Append)){return 0;} op…