复古C语言代码修复与解析——以[59][八皇后问题]为例
本文分享了59号逆矩阵计算项目的开发过程。首先介绍了选题动机和开发环境配置(Windows11、Dev-C++、VSCode等)。重点描述了编译调试阶段遇到的问题:非标准库函数使用、main函数返回值不规范等,并详细说明了解决方案。随后对八皇后问题代码进行了功能解析,包括棋盘初始化、冲突检测、递归放置等核心逻辑。文章还记录了VSCode配置和Git版本管理的具体操作步骤。最后总结了从抽象算法到具体
摘要
本文分享了介绍了选题动机和开发环境配置(Windows11、Dev-C++、VSCode等)。重点描述了编译调试阶段遇到的问题:非标准库函数使用、main函数返回值不规范等,并详细说明了解决方案。随后对八皇后问题代码进行了功能解析,包括棋盘初始化、冲突检测、递归放置等核心逻辑。文章还记录了VSCode配置和Git版本管理的具体操作步骤。最后总结了从抽象算法到具体实现的编程体会,指出代码虽简单却蕴含精妙逻辑。附录提供了项目仓库地址。
1.选题与准备
1.1选题
我从课程资源 GameCode155.rar 的项目中,选取 59号逆矩阵的计算作为分享主题,想来也没有什么特殊的原因,就是喜欢这个数字。

1.2环境准备
-
Windows 11
-
Dev-C++ 5.11、Vscode1.107.1 、 gcc6.3.0
-
豆包,deepseek
2.编译调试过程
2.1初始编译与错误分析
初始编译的错误和警告如图所示:

根据查找到的信息来看,这些错误源于:
非标准库函数的使用
clrscr()函数:这是 Borland/Turbo C 特有的清屏函数,不属于标准 C 库。现代编译器(如 GCC、Clang、MSVC)不再支持这个函数。getch()函数:同样是 Borland/Turbo C 特有的函数,用于从控制台读取单个字符而无需按回车键。现代编译器也不再支持这个函数。
main 函数返回值问题
- 错误:代码中
main函数被定义为void main(),这不符合 C 语言标准。 - 正确:C 语言标准要求
main函数必须返回int类型,即int main(),并且在函数末尾使用return 0;返回值。
函数声明问题
- 错误:在 C 语言中,函数必须在使用前声明或定义。如果函数定义在使用之后,需要在使用前进行声明。
- 正确:应该在代码开头添加函数声明,或者将函数定义放在使用之前。
代码可移植性差
- 由于使用了非标准库函数,代码无法在不同编译器和操作系统之间移植。
- 例如,
clrscr()在 Windows 上可以使用system("cls")替代,在 Linux/Unix 上可以使用system("clear")替代。
2.2错误修正
替换非标准库函数
clrscr()替换为跨平台的clear_screen()函数getch()替换为跨平台的wait_for_key()函数
修复 main 函数返回值问题
- 将
void main()改为int main() - 在函数末尾添加
return 0;
添加函数声明
- 在代码开头添加所有函数的声明,确保函数在使用前已经声明
增强代码可移植性
- 使用条件编译支持不同操作系统
- 在 Windows 上使用
system("cls")清屏,在 Linux/Unix 上使用system("clear")清屏 - 使用标准输入输出函数实现类似
getch()的功能
2.3反复调试
反复修改直至零错误警告

3代码的理解和命名
3.1运行测试

在8×8的国际象棋棋盘上放置8个皇后,使得它们互不攻击,即任何两个皇后都不能在同一行、同一列或同一对角线上。
3.2代码解析

-
开始:程序启动,清屏并显示提示信息。
-
初始化:定义棋盘大小和存储皇后位置的数组。
-
放置皇后:从第0行开始,尝试在每一列放置皇后。
-
检查冲突:对于每个位置,检查是否与已放置的皇后冲突(同一列或同一对角线)。
-
递归放置:如果当前位置安全,则递归调用自身,继续放置下一行的皇后。
-
输出结果:如果所有皇后都已放置完成(即放置到第8行),则输出当前的棋盘布局。
-
回溯调整:如果当前行的所有列都尝试过且都不安全,则回溯到上一行,尝试其他列。
-
结束:当所有可能的布局都尝试完成后,等待用户按键退出程序。
4使用vscode管理项目
4.1vscode配置
安装vscode:官网下载安装包,根据提示一步步安装
配置vscode:从左侧拓展栏搜索c相关插件
c语言环境配置:下载MinGW-w64并解压到中文路径,右键 “此电脑→属性→高级系统设置→环境变量”,在系统Path中添加该bin路径,cmd 输入gcc -v验证。
关联编译器:在 VSCode 中按Ctrl+Shift+P,输入C/C++: Edit Configurations (UI),选择 MinGW-w64 的gcc.exe路径。
4.2在vscode中编译运行

5代码版本管理
5.1Gitee仓库创建
1. 登录Gitee → 点右上角「+」→ 选「新建仓库」
(没账号先注册:gitee.com注册)
2. 填2个必填项,其他默认 → 点「创建」
-
仓库名称:起个名字(比如
test) -
是否开源:选「公开」(或私有,看需求)
3. 完成!
5.2vscode中集成git
Git 环境准备
已安装 Git 并配置好用户信息,在Git Bash执行git config --global user.name "用户名"和git config --global user.email "邮箱"
6总结
这次改八皇后的代码,最大的感受是 “把抽象算法落地成代码的踏实感”。最开始对着框架写,只知道 “要循环、要递归”,改完才摸清门路:put_chess是 “挨个试列”,check_cross是 “堵死冲突路”。细节上也摸清了:比如board存的是 “列号”,打印时直接输出就能看每个皇后的位置;MAX=8的边界要卡准,不然要么少打要么越界。现在再看这几行代码,不是 “字符堆”,是 “8 个皇后挨个找位置的过程”—— 简单的代码里,藏着挺妙的逻辑。
附录
更多推荐
所有评论(0)