C语言
文章平均质量分 66
姜子牙大侠
这个作者很懒,什么都没留下…
展开
-
【C语言学习笔记】:内部与外部函数
C语言函数的声明和定义一个函数一般由两部分组成:声明部分执行语句C语言对变量而言,声明与定义的关系稍微复杂一些,在声明部分出现的变量有两种情况:一种是需要建立存储空间的。另一种是不需要建立存储空间的。前者称为定义性声明,简称定义;后者称为引用性声明。一般为了叙述方便,把建立存储空间的声明称定义,而把不需要建立存储空间的声明称为声明。在函数中出现的对变量的声明,除了用extern声明的以外都是定义,在函数中对其他函数的声明不是函数的定义。C语言内部函数一个函数只能被本文件中其他函数所调用,它称为内部函数。在定原创 2023-03-20 21:22:26 · 967 阅读 · 3 评论 -
【C语言学习笔记】:局部与全局变量
在复合语句内定义的变量只在复合语句范围内有效,只有在本复合语句内才能引用它们。在一个函数内部定义的变量只在本函数范围内有效,也就是说只有在本函数内才能引用它们,在此函数以外是不能使用这些变量的。在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为“分程序”或“程序块”。主函数中定义的变量也只在主函数中有效,并不因为在主函数中定义而在整个文件或程序中有效。在函数内定义的变量是局部变量,而在函数之外定义的变量称为外部变量,外部变量是全局变量。请按任意键继续. . .原创 2023-03-20 21:19:42 · 828 阅读 · 0 评论 -
【C语言学习笔记】: 函数调用
在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”。int maxNumber(int num1,int num2)//自定义比较大小函数。在定义函数中指定的形参,在未出现函数调用时,它们并不是占内存中的存储单元。在定义函数时指定的函数类型一般应该和return语句中的表达式类型一致。在调用有参函数时,主调函数和被调函数之间有数据传递关系。函数的返回值是通过函数中的return语句获得的。函数值的类型,应当在定义函数时指定函数值的类型。int main()//主函数。原创 2023-03-19 22:21:49 · 1390 阅读 · 0 评论 -
【C语言学习笔记】:字符数组
\0’代表ASCII码为0的字符,从ASCII码表中可以查到,ASCII码为0的字符不是一个可以显示的字符,而是一个“空操作符”,即它什么也不做。作用:把两个字符数组中的字符串连接起来,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。字符数组是用来存放字符数据的数组,字符数组中的一个元素存放一个字符,定义字符数组的方法和定义数值型数组的方法类似。在C语言中,是将字符串作为字符数组来处理的,字符串中的字符是逐个存放到数组元素中的。也只输出到遇“\0”结束。原创 2023-03-19 22:17:40 · 1153 阅读 · 0 评论 -
【C语言学习笔记】: 一维数组
如果在定义数值型数组时,指定了数组的长度并对之初始化,凡未被“初始化列表”指定初始化的数组元素,系统会自动把它们初始化为0。在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。a[0]//就是数组a中序号为0的元素,它和一个简单变量的地位和作用相似。为了使程序简洁,常在定义数组的同时,给各数组元素赋值,这称为数组的初始化。在定义数组并对其中各元素赋值后,就可以引用数组中的元素。i++)//遍历数组。原创 2023-03-18 16:25:17 · 819 阅读 · 0 评论 -
【C语言学习笔记】:图解指针变量
1 指针变量的基本操作基本操作图解:1.1 己址和己空间指针变量也是一个变量,对应一块内存空间,对应一个内存地址,指针名就是己址。这空内存空间多大?一个机器字长(machine word),32位的CPU和操作系统就是32个位,4个字节,其值域为:0x-0xFFFFFFFF。64位的CPU和操作系统就是64个位,8个字节,其值域为:0x-0xFFFFFFFFFFFFFFFF。1.2 己值、他址、他空间指针变量的值就是其指向的空间的地址,指向的地址的空间大小就是指针变量指向类型的大小。原创 2023-03-08 22:51:45 · 315 阅读 · 0 评论 -
【C语言学习笔记】: 性能
尽量使用前置声明这种方式可以主动减少编译时间并重新构建依赖关系。注意: 前置声明会阻碍内联和优化,建议在发布版本中使用链接时优化或链接时代码生成。避免不必要的模板实例化模板不要随便实例化,实例化过多模板,或者模板代码多于必要的数量,会增加编译代码的大小和构建时间。避免递归模板实例化递归模板实例化可能会给编译器带来很大的负担,并且代码更加难以理解。如果可能的话,考虑使用可变参数展开和折叠[3]。分析构建。原创 2023-03-07 23:32:22 · 195 阅读 · 0 评论 -
【C语言学习笔记】:可移植性及多线程
明确使用的类型大多数产生告警的可移植性问题都是因为我们没有注意类型。标准库和数组使用size_t作为索引,标准容器的大小使用size_t类型。如果对size_t的处理不正确,可能会潜伏有微妙的64位问题,这种问题只有在开始32位整型索引溢出之后才会出现。另一种类似问题是char类型和类型的使用。使用标准库C++17新增了新的filesystem库,在所有支持的编译器上提供了可移植的文件系统访问能力。C++11的线程功能能够基于pthread或WinThreads使用。其他。原创 2023-03-07 23:26:55 · 194 阅读 · 0 评论 -
【C++学习笔记】:可维护性
这些关键字使其他开发人员可以清楚知道虚函数可以被如何使用,如果虚函数的签名发生了变化,就可以捕获潜在错误,并有可能向编译器提示可以执行哪些优化。在阅读代码时,布尔值无法提供任何额外含义。可以创建一个名称更有意义的独立函数,或者传递含义更明确的枚举值。宏在编译之前被预处理器所替换,从而使得调试非常困难,因为调试器无法知道源代码来自哪里。的调用看作是一种潜在的代码坏味道,表明没有在需要的地方使用合适的算法。虽然第二个版本更丑,但总比第一个错误版本好一点。了解和理解现有C++标准算法,并付诸实践。原创 2023-03-06 22:55:07 · 303 阅读 · 0 评论 -
【C语言学习笔记】:安全性
可变参数函数的使用不是类型安全的,错误的输入参数可能导致程序以未定义的行为终止。),可以被忽略,如果不检查,可能会导致崩溃或内存错误,而异常不能被忽略。C++中很难在没有内存错误和泄漏风险[3]的情况下正确处理裸内存的访问、分配和回收,C++11提供了避免这些问题的工具。这两种方法都保证了对象的连续内存布局,并且可以(而且应该)完全取代C风格数组,另外这也是不使用裸指针的诸多原因之一。)代替C风格的强制类型转换,C++风格的强制转换允许更多的编译器检查,而且相当安全。相反,通过值传递和返回简单类型。原创 2023-03-06 22:49:30 · 394 阅读 · 0 评论 -
【C语言学习笔记】:指针
第二,它是一个指针,该指针的类型是TYPE*,该指针指向的类型是TYPE,也就是数组单元的类型,该指针指向的内存区就是数组第0号单元,该指针自己占有单独的内存区,注意它和数组第0号单元占据的内存区是不同的。&a的运算结果是一个指针,指针的类型是a的类型加个*,指针所指向的类型是a的类型,指针所指向的地址嘛,那就是a的地址。"的第一个字符的地址,即'H'的地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。原创 2023-03-05 22:47:03 · 312 阅读 · 0 评论 -
【C语言学习笔记】:三子棋具体步骤和代码
用c语言实现三子棋。原创 2023-03-05 22:40:51 · 274 阅读 · 0 评论 -
【C语言学习笔记】:一维数组指针,二维数组指针
数组(Array)是一系列具有相同类型的数据的集合,每一份数据叫做一个数组元素(Element)。数组中的所有元素在内存中是连续排列的,整个数组占用的是一块内存。以为例,该数组在内存中的分布如下图所示:定义数组时,要给出数组名和数组长度,数组名可以认为是一个指针,它指向数组的第 0 个元素。在C语言中,我们将第 0 个元素的地址称为数组的首地址。数组下标实际上是每个元素的地址相对于第一个元素地址的偏移量访问数组元素除了可以通过下标法之外,还可以通过指针法访问。下标法i < 6;i++)原创 2023-03-04 11:52:59 · 800 阅读 · 0 评论 -
【C语言学习笔记】:二级指针
指针可以指向一个普通类型的数据,例如 int、double、char 等,也可以指向一个指针类型的数据,例如 int *、double *、char * 等。C语言不限制指针的级数,每增加一级指针,在定义指针变量时就得增加一个星号。如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。ppage 是二级指针,指向一级指针 page,定义时有两个。page 是一级指针,指向普通类型的数据,定义时有一个。想要获取指针指向的数据时,一级指针加一个。,以此类推,请看代码:。原创 2023-03-04 11:43:41 · 388 阅读 · 0 评论 -
【C语言学习笔记】:简单选择排序
最终得到(0,1,2,3,6,5,4,9,8,7),其中(0,1,2)已经有序。最终得到(0,1,3,2,6,5,4,9,8,7),其中(0,1)已经有序。第二趟子排序:整个记录序列中(0,3,1,2,6,5,4,9,8,7)的数据(0)已经有序,只需针对子数据记录序列(3,1,2,6,5,4,9,8,7)。第三趟子排序:整个记录序列中(0,1,3,2,6,5,4,9,8,7)的数据(0,1)已经有序,只需针对子数据记录序列(3,2,6,5,4,9,8,7)。原创 2023-02-22 16:15:46 · 182 阅读 · 0 评论 -
【C语言学习笔记】:快速排序
对于(5,6,9,8,7),选择5作为枢轴,得到(5,6,9,8,7),分成两个部分,前面部分为空,后面部分为(6,9,8,7),其中5已经有序。对于(6,9,8,7),选择6作为枢轴,得到(6,9,8,7),分成两个部分,前面部分为空,后面部分为(9,8,7),其中6已经有序。对于(0,3,1,2),选择0作为枢轴,得到(0,3,1,2),分成两个部分,前面部分为空,后面部分为(3,1,2),0已有序。第一趟子排序:针对整个数据记录(4,3,1,2,6,5,0,9,8,7)。原创 2023-02-22 16:12:41 · 371 阅读 · 0 评论 -
【C语言学习】:十进制转换二进制
函数dectobin应在一行中打印出二进制的n。建议用递归实现。原创 2023-02-21 16:22:00 · 152 阅读 · 0 评论 -
【C语言学习笔记】:折叠表达式
例如与加号结合使用来计算所有值的和:。例如:。而使用折叠表达式,通过单个函数模板就可以实现上述功能,不需要多余的函数,看代码:。但这里有个问题,该函数的使用一定需要至少一个参数,否则将无法通过编译:。例如对于func(1, 2, 3),函数内的折叠表达式会展开成这样:。对于sum(1, 2, 3, 4),展开的形式如下:。下面是折叠表达式展开后的形式:。再用一个例子巩固下:。原创 2023-02-16 12:07:28 · 728 阅读 · 0 评论 -
【C语言学习笔记】:数组、指针相关面试题
复制完后,实参的地址和形参的地址没有任何联系,对形参地址的修改不会影响到实参,但是对形参地址所指向对象的修改却能直接反映在实参中,这是因为形参所指向的对象就是实参的对象。前面我们说过,指针传递本质上也是值传递,要想在子函数修改str的值,必须要传递指向str的指针,因此子函数要传递的是str的地址,这样通过指针方式修改str的值,将malloc的内存首地址赋值给str。"进行了拷贝,该局部变量是存放在栈中的,当函数退出时,栈被清空,p会被释放,因此返回的是一个已经被释放的内存地址,这样做是错误的。原创 2023-02-15 12:12:57 · 515 阅读 · 0 评论 -
【C语言学习笔记】:动态库
结合之前的静态库与本篇动态库,总结出来二者的不同点在于代码被载入的时刻不同。✪ 静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库,因此体积较大。✪ 动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在,因此代码体积较小。原创 2023-02-13 20:15:13 · 1087 阅读 · 0 评论 -
【C语言学习笔记】:静态库
打开工程“属性面板”→”配置属性”→“C/C++”→” 常规”,在“附加包含目录”属性值中,键入StaticMath.h 头文件所在目录的路径或浏览至该目录。✪ -l:指定链接时需要的动态库,编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.a或.so来确定库的名称。还有2中方法设置都可行。① “属性面板”→”配置属性”→“链接器”→”常规”,附加依赖库目录中输入,静态库所在目录;打开工程“属性面板”→”配置属性”→ “链接器”→ ”命令行”,输入静态库的完整路径即可。原创 2023-02-13 19:45:05 · 1407 阅读 · 0 评论 -
【C语言学习笔记】:一些实用小技巧
C中的一个惯用方法,是说有一个已命名的实体列表,需要为它们中的每一个建立函数,将它们中的每一个初始化,并在不同的代码模块中扩展它们的名字。假设我们定义了一个宏DEFINE_FLAG,如:。这样就可以静态分配足够的空间,且保证最大的索引是合法的,同时将特殊的索引初始化为指定的值,并将剩下的索引初始化为0。接着,对每个参数都扩展DEFINE_FLAG宏,这样我们就得到了enum如下:。接着,我们可能要定义一些访问函数,这样才能更好的使用flag列表:。原创 2023-02-12 21:22:56 · 515 阅读 · 1 评论 -
【C语言学习笔记】:数组倒序排列,数组倒置
以表达式 1 为例,它是一个“整体”,它可以是一个表达式,也可以是多个表达式,如果是多个表达式就用逗号隔开,如程序中那样。但是如果表达式间用分号隔开就不能看成一个“整体”,即只能看成一个表达式了,如上面的“表达式 1;要完成倒置的功能,只需要第一个元素和最后一个元素交换、第二个元素和倒数第二个元素交换、第三个元素和倒数第三个元素交换……程序中,完成相同功能执行的步数越少,算法就越好,效率也就越高。上面这个算法是完全的“复制”,数组有几个元素就执行多少次。此程序中,for 循环括号中的写法是正确的。原创 2023-02-12 21:11:52 · 2717 阅读 · 1 评论 -
【C++学习笔记】:代码风格
C++学习笔记:1. 工具2. 代码风格(本文)3. 安全性4. 可维护性5. 可移植性及多线程6. 性能7. 正确性和脚本代码风格最重要的是一致性,其次是遵循C++程序员习惯的阅读风格。C++允许任意长度的标识符名称,因此在命名时没必要非要保持简洁,建议使用描述性名称,并在风格上保持一致。(驼峰命名法)(蛇形命名法)这两种是很常见的命名规范,的优点是,在需要的时候可以适配拼写检查器。建立代码风格指南无论建立什么样的代码风格指南,一定要实现指定期望风格的文件。虽然这对命名没有帮助,但对于开源项目来说,保持一原创 2023-02-09 10:11:38 · 1032 阅读 · 0 评论 -
【C++学习笔记】:1.工具
C++最佳实践: 支持Fork的编码标准文档本文档旨在收集对C++最佳实践所进行的协作性讨论,是和等书籍的补充。在讨论如何确保整体代码质量的同时,补充了一些没有讨论到的较低级别的细节,并提供了具体的风格建议。在任何情况下,简单明了都是首选。本文所举示例是为了说明为什么一种选择比另一种更受欢迎。在必要情况下,也会用文字说明。本文档由Jason Turner编写,根据知识共享署名-非商业4.0国际许可协议[2]授权。免责声明本文档的编写基于个人经验,你不需要完全同意其中的观点。原创 2023-02-09 10:07:45 · 449 阅读 · 0 评论 -
【C语言学习笔记】:学生信息管理系统演示及说明(含源码)
该软件将学生信息保存在文件中,直接对文件中的数据进行增删改查操作,除了能够培养您的编程思维,还能让你深入了解文件操作。学生管理系统可以用来管理班级学生,能够对学生信息(包括姓名、性别、年龄、成绩等)进行增加、删除、更改、查询等操作。输入数字1~5,或者0,就可以进行相应的操作。软件还会对用户输入的信息进行校验,不符合规则的数据会给出提示。添加成功后,会给出提示信息。源码、程序下载地址在主页资源内。原创 2023-02-08 11:19:04 · 251 阅读 · 0 评论 -
【C语言学习笔记】:温度转换
用温度计测量出用华氏温度98°F,现在要求用C语言实现把它转换为以摄氏法表示的温度。解题思路:这个问题的算法很简单,关键在于找到二者之间的转化公式,摄氏度等于九分之五乘以华氏度减去32的积,也就是:centigrade=(5.0/9)*(f_Degree-32);源代码演示:#include<stdio.h>//头文件int main() //主函数{ float f_Degree,centigrade; //定义浮点型变量 f_Degree=9原创 2023-02-06 10:52:36 · 535 阅读 · 0 评论 -
【C语言学习笔记】:C语言实现进度条
首先我们需要将[ ]固定在左右两边,中间预留下空间,然后用“=”进行填充。格式化输出,‘-’表示左对齐,100表示固定列宽,然后‘\r’ 表示回车,即每次打印完使光标回到最开始位置。如果不加睡眠时间,结果一下就全打印出来了,但我们想让它稍微慢一点,毕竟是进度条嘛,而Linux系统下默认sleep时间单位为秒(s),这样的话又觉得间隔时间太长了,于是就有了usleep,它是以微妙计的。再明确一下,‘\n’和‘\r’这两个概念:‘\n’表示换行,换到当前行的下一行,即光标指向下一行最开始的位置;原创 2023-02-06 10:39:57 · 793 阅读 · 0 评论 -
【C语言面试题】:C++的对象布局
非虚继承时,显然D会继承两次A,内部就会存储两份A的数据浪费空间,而且还有二义性,D调用A的方法时,由于有两个A,究竟时调用哪个A的方法呢,编译器也不知道,就会报错,所以有了虚继承,解决了空间浪费以及二义性问题。在虚拟继承下,只有一个共享的基类子对象被继承,而无论该基类在派生层次中出现多少次。这里可见,对象布局和上面的不相同啦,BaseB的虚函数表指针和数据在上面,BaseA的虚函数表指针和数据在下面,以A,B的顺序继承,对象的布局就是A在上B在下,以B,A的顺序继承,对象的布局就是B在上A在下。原创 2023-01-30 15:40:33 · 96 阅读 · 0 评论 -
【C语言学习笔记】:8道经典的数组、指针相关面试题
复制完后,实参的地址和形参的地址没有任何联系,对形参地址的修改不会影响到实参,但是对形参地址所指向对象的修改却能直接反映在实参中,这是因为形参所指向的对象就是实参的对象。前面我们说过,指针传递本质上也是值传递,要想在子函数修改str的值,必须要传递指向str的指针,因此子函数要传递的是str的地址,这样通过指针方式修改str的值,将malloc的内存首地址赋值给str。"进行了拷贝,该局部变量是存放在栈中的,当函数退出时,栈被清空,p会被释放,因此返回的是一个已经被释放的内存地址,这样做是错误的。原创 2023-01-30 15:11:44 · 647 阅读 · 0 评论 -
【C语言学习笔记】:课程设计学生成绩管理系统
功能点较多,总共600行左右,很大一部分代码是错误处理,因此对于初学者可以将这部分代码精简,预计也就是200-300行左右,下一篇将提供精简版。1.学生信息包括学号、姓名、4门课成绩(语文、数学、英语、专业课),成绩百分制整数;备注:简单选择排序算法,是每次循环选出最大值或最小值,交换到链表前面。4.按照姓名或学号查询显示学生信息,姓名和学号都唯一不重复;7.计算总分和平均分,按照学生总分或平均分从高到低排序。- 使用链表保存学生信息,实现增删改查和排序功能;- 使用文件保存学生信息;原创 2023-01-28 23:25:30 · 342 阅读 · 0 评论 -
【C语言学习笔记】:如何生成负数随机数并排序输出
这里有个小技巧,例如库函数中的rand函数只能生成正整数,所以如果要生成负数可以使用减去一个正整数,例如本题目中,可以先生成20个正整数,小于10的就认为是负数。C语言随机函数、排序函数使用,这里面可以参照库函数使用,之前的文章有分析,这里就不在一一说明了。库函数里面有很多有用的函数,大家可以使用,这样事半功倍。随机生成20个[-10, 10]内的随机整数,按照绝对值从小到大排序,并且输出。原创 2023-01-28 23:17:43 · 1657 阅读 · 1 评论 -
【C语言学习笔记】:快速排序
对于(5,6,9,8,7),选择5作为枢轴,得到(5,6,9,8,7),分成两个部分,前面部分为空,后面部分为(6,9,8,7),其中5已经有序。对于(6,9,8,7),选择6作为枢轴,得到(6,9,8,7),分成两个部分,前面部分为空,后面部分为(9,8,7),其中6已经有序。对于(0,3,1,2),选择0作为枢轴,得到(0,3,1,2),分成两个部分,前面部分为空,后面部分为(3,1,2),0已有序。第一趟子排序:针对整个数据记录(4,3,1,2,6,5,0,9,8,7)。# 代码实现(递归实现)原创 2023-01-27 11:35:11 · 83 阅读 · 0 评论 -
【C语言学习笔记】:好玩的C语言源码
需要先输入玩游戏的 ID ,游戏规则是 wasd 控制贪吃蛇方向,p 是暂停键。俄罗斯方块可以在编译运行后直接玩,玩法和传统俄罗斯方块一样。输入自己的游戏 ID 后,就能开始玩了。原创 2023-01-27 11:29:08 · 1663 阅读 · 0 评论 -
【C++学习笔记】:华为 C语言经典面试题
然而很多问题是自己造成的漏洞,编译器是帮不上什么忙的。方法:从上次分配的RAM块后的RAM块开始检测SRAM每个RAM块,看是否是IDLE状态,如果是IDLE则返回当前的RAM块的号SRM_no。简单的分析一下函数,可以知道,若传入的参数不变,则每次调用sum函数返回的结果,都比上次多2。这里for循环的判断语句是后来我加上的,估计在网上流传的时候被人给弄丢了,根据对程序的分析,给补上了。小结:上面的三个找错的函数,主要是考查对字符串和字符数组的概念的掌握以及对strcpy函数和strlen函数的理解。原创 2023-01-26 11:45:55 · 342 阅读 · 0 评论 -
【C++学习笔记】:对象布局相关面试题
非虚继承时,显然D会继承两次A,内部就会存储两份A的数据浪费空间,而且还有二义性,D调用A的方法时,由于有两个A,究竟时调用哪个A的方法呢,编译器也不知道,就会报错,所以有了虚继承,解决了空间浪费以及二义性问题。在虚拟继承下,只有一个共享的基类子对象被继承,而无论该基类在派生层次中出现多少次。这里可见,对象布局和上面的不相同啦,BaseB的虚函数表指针和数据在上面,BaseA的虚函数表指针和数据在下面,以A,B的顺序继承,对象的布局就是A在上B在下,以B,A的顺序继承,对象的布局就是B在上A在下。原创 2023-01-25 09:47:55 · 103 阅读 · 0 评论 -
【C语言学习笔记】:数组、指针相关面试题
复制完后,实参的地址和形参的地址没有任何联系,对形参地址的修改不会影响到实参,但是对形参地址所指向对象的修改却能直接反映在实参中,这是因为形参所指向的对象就是实参的对象。前面我们说过,指针传递本质上也是值传递,要想在子函数修改str的值,必须要传递指向str的指针,因此子函数要传递的是str的地址,这样通过指针方式修改str的值,将malloc的内存首地址赋值给str。"进行了拷贝,该局部变量是存放在栈中的,当函数退出时,栈被清空,p会被释放,因此返回的是一个已经被释放的内存地址,这样做是错误的。原创 2023-01-25 09:34:18 · 297 阅读 · 0 评论 -
C++学习笔记——有参构造函数
在C++中,程序员希望对不同的对象赋予不同的初值,可以采用带参数的构造函数,在调用不同对象的构造函数时,从外面将不同的数据传递给构造函数, 以实现不同的初始化。C++类的数据成员是不能在声明类时初始化的,如果一个类中所有的成员都是公用的,则可以在定义对象时对数据成员进行初始化。Box::Box(int h,int w,int l)//在类外定义带参数的构造函数。cout原创 2023-01-24 16:03:40 · 1310 阅读 · 0 评论 -
C语言学习笔记——实现扫雷小游戏
定义一个变量safe,表示翻开的不是地雷的土地,每次更新地图后,safe加一。如果最后翻开的不是地雷的土地等于地图的大小减地雷数,那么排除所有地雷,确认安全。如果翻开的位置在mine上显示为1,那么翻到地雷了,输出被炸死,打印地雷地图,让玩家死得明白。printf("------1.开始游戏------\n");printf("------0.退出游戏------\n");printf("------1.开始游戏------\n");printf("------0.退出游戏------\n");原创 2023-01-24 15:59:12 · 212 阅读 · 0 评论 -
C语言学习笔记——用C语言实现进度条
首先我们需要将[ ]固定在左右两边,中间预留下空间,然后用“=”进行填充。格式化输出,‘-’表示左对齐,100表示固定列宽,然后‘\r’ 表示回车,即每次打印完使光标回到最开始位置。如果不加睡眠时间,结果一下就全打印出来了,但我们想让它稍微慢一点,毕竟是进度条嘛,而Linux系统下默认sleep时间单位为秒(s),这样的话又觉得间隔时间太长了,于是就有了usleep,它是以微妙计的。再明确一下,‘\n’和‘\r’这两个概念:‘\n’表示换行,换到当前行的下一行,即光标指向下一行最开始的位置;原创 2023-01-23 15:27:15 · 1249 阅读 · 0 评论