摘要

  

        本文基于《程序设计语言(B)》课程任务要求,选取编号166的C语言代码文件进行修复与解析。过程中先通过Dev-C++编译代码定位语法错误与兼容性问题,借助搜索引擎、AI工具检索、C语言程序设计教材等解决方案并完成代码修正,直至实现零错误零警告编译;随后运行程序并分析其功能为文件字符加密工具,手工绘制代码流程图以梳理逻辑;接着完成VSCode环境下的编译运行配置,以及Gitee仓库的项目上传与管理;最后总结整个过程中的技术难点与学习收获,形成完整的技术实践报告。

1 选题与准备

1.1 选题

本次课程任务选取编号为166的C语言代码文件,该文件代码核心围绕文件字符的读取、加密与写入展开,属于典型的文件操作与字符处理类程序,能较好地练习C语言文件IO、指针操作及兼容性问题修复,适合作为复古代码修复的实践案例。

1.2 环境准备

• 操作系统:Windows 11 专业版

• 编译器:Dev-C++、VSCode

• 辅助工具:浏览器、AI、Gitee客户端、CSDN平台、《C语言程序设计》教材

• 文件资源:课程提供的166.c源文件、in166.dat测试文件

2 编译调试过程

2.1 初始编译与错误分析

将166.c在Dev-C++中编译,出现以下核心错误(部分):

1. 无符号字符指针与普通字符指针的类型不兼容转换,C语言标准对指针类型转换的严格性要求高于老旧编译器。

2.clrscr()是老式DOS下的清屏函数,现代编译器(如GCC)未实现该函数。

3. 老旧代码使用的隐式返回或非标准main函数声明,不符合C99及以上标准的int main()要求。

4. 返回值类型为int的函数中,存在无返回值的return语句。

2.2 错误修正

针对上述错误,逐一检索并实施修复:

1. 指针类型转换错误

◦ 问题位置:encryptChar()函数中unsigned char *pf; pf = xx[i];

◦ 解决方案:显式进行类型转换,修改为pf = (unsigned char *)xx[i];,符合C语言指针类型转换的语法规范。

2. clrscr()函数未定义

◦ 问题原因:该函数属于<conio.h>的DOS专用函数,现代编译器不支持。

◦ 解决方案:替换为标准C的清屏方案,Windows下使用system("cls")(需保留<stdlib.h>头文件),删除对clrscr()的调用,直接保留system("cls")实现清屏。

3. main函数返回值错误

◦ 问题位置:原代码main()未声明返回值类型,不符合标准。

◦ 解决方案:修改为int main(),并在函数末尾添加return 0;,满足C语言main函数必须返回int类型的要求。

4. 返回值缺失错误

◦ 问题位置:PressKeyToQuit()函数中return;无返回值,但函数若声明为int类型需返回数值(实际该函数应定义为void)。

◦ 解决方案:将PressKeyToQuit()的函数声明改为void PressKeyToQuit(),移除无意义的返回值,符合void函数的语法规则。

2.3 反复调试

修复上述错误后,再次编译仍出现<conio.h>头文件相关警告(getch()函数兼容性),将getch()替换为标准输入函数getchar()(需保留<stdio.h>头文件)。最终编译通过,无Error与Warning提示,编译成功截图如下:

3 代码理解与重命名

3.1 运行测试

运行编译生成的166.exe,程序首先读取in166.dat文件内容,对每个字符执行*pf = *pf*11%256的加密运算(若满足指定条件),随后将加密后的内容写入out166.dat文件,控制台输出“Press any key to quit...”,按下回车后程序退出。通过对比in166.dat与out166.dat的字符内容,验证了程序的文件加密功能。

3.2 代码解析

程序核心逻辑分为文件读取、字符加密、文件写入三部分,手工绘制的流程图如下:
(此处插入手工绘制/Visio制作的程序流程图,核心流程:初始化→读取in166.dat→逐行逐字符加密→写入out166.dat→程序退出)

核心代码逻辑说明:

• ReadDat():打开in166.dat,逐行读取内容到unsigned char xx[50][80]数组,记录总行数maxline。

• encryptChar():遍历数组中每个字符,执行*pf*11%256的加密运算(条件判断为加密规则筛选)。

• WriteDat():将加密后的数组内容写入out166.dat文件。

• main():程序入口,依次执行清屏、文件读取、加密、写入、等待按键退出操作。

4 使用VSCode管理项目

4.1 VSCode环境配置

1. 下载安装VSCode,安装C/C++插件(Microsoft官方版本)。

2. 配置MinGW-w64环境变量,将GCC编译器路径添加至系统Path。

3. 在VSCode中打开项目文件夹,创建.vscode目录,添加c_cpp_properties.json(配置编译器路径)、tasks.json(配置编译任务)、launch.json(配置调试任务),完成C语言开发环境的基础配置。

4.2 在VSCode中编译运行

1. 打开重命名后的166文件字符加密工具.c文件。

2. 按下Ctrl+Shift+B执行编译任务,生成可执行文件。

5 代码版本管理

5.1 Gitee仓库创建

1. 注册Gitee账号,创建新仓库,选择公开仓库并初始化README.md。

2. 复制仓库的HTTPS地址,用于本地代码推送。

5.2 VSCode中集成Git

1. 在VSCode中安装Git插件,打开项目文件夹的终端,执行git init初始化本地仓库。

2. 执行git add .将项目文件加入暂存区,git commit -m "初始化166文件加密工具代码"完成提交。

3. 执行git remote add origin [Gitee仓库地址]关联远程仓库,git push -u origin master将代码推送至Gitee仓库(此处插入VSCode终端Git操作截图)。

4. 后续代码修改可通过Git插件的图形化界面完成提交、推送,实现项目的版本管理。


6 总结

本次课程任务通过修复复古C语言代码,深入理解了C语言标准的演进(如main函数规范、指针类型转换、老旧函数的淘汰),掌握了Dev-C++与VSCode的C语言开发环境配置,以及Gitee的代码版本管理方法。在调试过程中,面对语法兼容性错误,学会了通过搜索引擎、技术社区检索解决方案,提升了问题排查与自主学习能力;通过解析代码逻辑与绘制流程图,加深了对C语言文件IO、指针操作的理解。同时也认识到,复古代码虽存在兼容性问题,但其中的程序设计思想(如模块化的文件操作、字符处理逻辑)仍具有学习价值,为后续C语言项目开发积累了实践经验。

附录

Gitee仓库链接:

https://gitee.com/xia-shuhuan/course-report.git

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐