## 什么是注释? - 注释是在所有计算机语言中都非常重要的一个概念,从字面上看,就是注解、解释的意思 - 注释可以用来解释某一段程序或者某一行代码是什么意思,方便程序员之间的交流沟通 - 注释可以是任何文字,也就是说可以写中文 - 被注释的内容在开发工具中会有特殊的颜色 --- ## 为什么要使用注释? - 没有编写任何注释的程序 ```c void printMap(char map[6][7] , int row, int col); int main(int argc, const char * argv[]) { char map[6][7] = { {'#', '#', '#', '#', '#', '#', '#'}, {'#', ' ', ' ', ' ', '#' ,' ', ' '}, {'#', 'R', ' ', '#', '#', ' ', '#'}, {'#', ' ', ' ', ' ', '#', ' ', '#'}, {'#', '#', ' ', ' ', ' ', ' ', '#'}, {'#', '#', '#', '#', '#', '#', '#'} }; int row = sizeof(map)/sizeof(map[0]); int col = sizeof(map[0])/ sizeof(map[0][0]); printMap(map, row, col); int pRow = 2; int pCol = 1; int endRow = 1; int endCol = 6; while ('R' != map[endRow][endCol]) { printf("亲, 请输入相应的操作\n"); printf("w(向上走) s(向下走) a(向左走) d(向右走)\n"); char run; run = getchar(); switch (run) { case 's': if ('#' != map[pRow + 1][pCol]) { map[pRow][pCol] = ' '; pRow++;//3 map[pRow][pCol] = 'R'; } break; case 'w': if ('#' != map[pRow - 1][pCol]) { map[pRow][pCol] = ' '; pRow--; map[pRow][pCol] = 'R'; } break; case 'a': if ('#' != map[pRow][pCol - 1]) { map[pRow][pCol] = ' '; pCol--; map[pRow][pCol] = 'R'; } break; case 'd': if ('#' != map[pRow][pCol + 1]) { map[pRow][pCol] = ' '; pCol++; map[pRow][pCol] = 'R'; } break; } printMap(map, row, col); } printf("你太牛X了\n"); printf("想挑战自己,请购买完整版本\n"); return 0; } void printMap(char map[6][7] , int row, int col) { system("cls"); for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { printf("%c", map[i][j]); } printf("\n"); } } ``` - 编写了注释的程序 ```c /* R代表一个人 #代表一堵墙 // 0123456 ####### // 0 # # // 1 #R ## # // 2 # # # // 3 ## # // 4 ####### // 5 分析: >1.保存地图(二维数组) >2.输出地图 >3.操作R前进(控制小人行走) 3.1.接收用户输入(scanf/getchar) w(向上走) s(向下走) a(向左走) d(向右走) 3.2.判断用户的输入,控制小人行走 3.2.1.替换二维数组中保存的数据 ( 1.判断是否可以修改(如果不是#就可以修改) 2.修改现有位置为空白 3.修改下一步为R ) 3.3.输出修改后的二维数组 4.判断用户是否走出出口 */ // 声明打印地图方法 void printMap(char map[6][7] , int row, int col); int main(int argc, const char * argv[]) { // 1.定义二维数组保存迷宫地图 char map[6][7] = { {'#', '#', '#', '#', '#', '#', '#'}, {'#', ' ', ' ', ' ', '#' ,' ', ' '}, {'#', 'R', ' ', '#', '#', ' ', '#'}, {'#', ' ', ' ', ' ', '#', ' ', '#'}, {'#', '#', ' ', ' ', ' ', ' ', '#'}, {'#', '#', '#', '#', '#', '#', '#'} }; // 2.计算地图行数和列数 int row = sizeof(map)/sizeof(map[0]); int col = sizeof(map[0])/ sizeof(map[0][0]); // 3.输出地图 printMap(map, row, col); // 4.定义变量记录人物位置 int pRow = 2; int pCol = 1; // 5.定义变量记录出口的位置 int endRow = 1; int endCol = 6; // 6.控制人物行走 while ('R' != map[endRow][endCol]) { // 6.1提示用户如何控制人物行走 printf("亲, 请输入相应的操作\n"); printf("w(向上走) s(向下走) a(向左走) d(向右走)\n"); char run; run = getchar(); // 6.2根据用户输入控制人物行走 switch (run) { case 's': if ('#' != map[pRow + 1][pCol]) { map[pRow][pCol] = ' '; pRow++;//3 map[pRow][pCol] = 'R'; } break; case 'w': if ('#' != map[pRow - 1][pCol]) { map[pRow][pCol] = ' '; pRow--; map[pRow][pCol] = 'R'; } break; case 'a': if ('#' != map[pRow][pCol - 1]) { map[pRow][pCol] = ' '; pCol--; map[pRow][pCol] = 'R'; } break; case 'd': if ('#' != map[pRow][pCol + 1]) { map[pRow][pCol] = ' '; pCol++; map[pRow][pCol] = 'R'; } break; } // 6.3重新输出行走之后的地图 printMap(map, row, col); } printf("你太牛X了\n"); printf("想挑战自己,请购买完整版本\n"); return 0; } /** * @brief printMap * @param map 需要打印的二维数组 * @param row 二维数组的行数 * @param col 二维数组的列数 */ void printMap(char map[6][7] , int row, int col) { // 为了保证窗口的干净整洁, 每次打印都先清空上一次的打印 system("cls"); for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { printf("%c", map[i][j]); } printf("\n"); } } ``` --- ## 注释的分类 - 单行注释 + // 被注释内容 + 使用范围:任何地方都可以写注释:函数外面、里面,每一条语句后面 + 作用范围: 从第二个斜线到这一行末尾 + 快捷键:Ctrl+/ - 多行注释 + /* 被注释内容 \*/ + 使用范围:任何地方都可以写注释:函数外面、里面,每一条语句后面 + 作用范围: 从第一个/\*到最近的一个*/ --- ## 注释的注意点 - 单行注释可以嵌套单行注释、多行注释 ```c // 南哥 // 公号代码情缘 // /* 江哥 */ // 瓜哥 //公众号代码情缘 ``` - 多行注释可以嵌套单行注释 ```c /* // 作者:LNJ // 描述:第一个C语言程序作用:这是一个主函数,C程序的入口点 */ ``` - 多行注释***不能***嵌套多行注释 ```c /* 哈哈哈 /*嘻嘻嘻*/ 呵呵呵 */ ``` --- ## 注释的应用场景 - 思路分析 ```c /* R代表一个人 #代表一堵墙 // 0123456 ####### // 0 # # // 1 #R ## # // 2 # # # // 3 ## # // 4 ####### // 5 分析: >1.保存地图(二维数组) >2.输出地图 >3.操作R前进(控制小人行走) 3.1.接收用户输入(scanf/getchar) w(向上走) s(向下走) a(向左走) d(向右走) 3.2.判断用户的输入,控制小人行走 3.2.1.替换二维数组中保存的数据 ( 1.判断是否可以修改(如果不是#就可以修改) 2.修改现有位置为空白 3.修改下一步为R ) 3.3.输出修改后的二维数组 4.判断用户是否走出出口 */ ``` - 对变量进行说明 ```c // 2.计算地图行数和列数 int row = sizeof(map)/sizeof(map[0]); int col = sizeof(map[0])/ sizeof(map[0][0]); ``` - 对函数进行说明 ```c /** * @brief printMap * @param map 需要打印的二维数组 * @param row 二维数组的行数 * @param col 二维数组的列数 */ void printMap(char map[6][7] , int row, int col) { system("cls"); for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { printf("%c", map[i][j]); } printf("\n"); } } ``` - 多实现逻辑排序 ```c // 1.定义二维数组保存迷宫地图 char map[6][7] = { {'#', '#', '#', '#', '#', '#', '#'}, {'#', ' ', ' ', ' ', '#' ,' ', ' '}, {'#', 'R', ' ', '#', '#', ' ', '#'}, {'#', ' ', ' ', ' ', '#', ' ', '#'}, {'#', '#', ' ', ' ', ' ', ' ', '#'}, {'#', '#', '#', '#', '#', '#', '#'} }; // 2.计算地图行数和列数 int row = sizeof(map)/sizeof(map[0]); int col = sizeof(map[0])/ sizeof(map[0][0]); // 3.输出地图 printMap(map, row, col); // 4.定义变量记录人物位置 int pRow = 2; int pCol = 1; // 5.定义变量记录出口的位置 int endRow = 1; int endCol = 6; // 6.控制人物行走 while ('R' != map[endRow][endCol]) { ... ... } ``` --- ## 使用注释的好处 - 注释是一个程序员必须要具备的良好习惯 - 帮助开发人员整理实现思路 - 解释说明程序, 提高程序的可读性 + 初学者编写程序可以养成习惯:先写注释再写代码 + 将自己的思想通过注释先整理出来,在用代码去体现 + 因为代码仅仅是思想的一种体现形式而已 --- 最后,如果你有任何问题,加微信 leader_fengy 拉你进学习交流群。