2021.10.9  周六  多云转小雨  学习时间 17:30~03:00  个人状态:失眠旅途

 

      又到了喜闻乐见的周末,所以今天的学习时间超级加倍(包括明天也超级加倍)!

      使用工具:Visual Studio 2019

      今天又来记录一下踩到的小坑。

      字符串数组在采用sizeof计算最后一个元素下标的时候,因为结尾会默认带一个/0,所以跟普通的整形数组计算下标不同。整形数组计算最后下标是-1,而字符串数组是-2。(当然用strlen计算最后一个下标是-1的)

       借用Sleep函数,首字母要大写,否则编译器会认为这是一个变量名,然后error告诉你sleep未定义。

       晚上还跟着做了个小游戏,虽然跟老师的想法不一样,老师是用do while循环嵌套switch来实现,用switch来判断整个游戏开始,退出,再来一局等操作,再外设一个函数if来走游戏具体流程。我呢则是用if嵌套while循环,if判断是否开始游戏,else if中再内嵌一个if判断是否退出,再来一局则用goto来实现,游戏主体也直接架设在while内。当然还是老师那个好,最终还能用输入的1或者0来形成整个闭环,比我的简洁许多,毕竟多分支的switch还是比较硬的。但实现的功能还是相同的,给我一定的时间我还能再优化优化。

      当然问题遇到的也不少,最大的问题就是随机数了。直接使用int num =rand()100%+1,虽然可以取到一个1~100的数字,但会发现反复运行后,随机取的数字根本不变(感觉像弄了个假的随机值)。后来听讲解才知道用过rand之前还要先写一个srand,大概就是这样srand((unsigned int)time(NULL));,srand要一个unsigned int类型,但time又是time_t类型,time_t又是对time32的重命名,然后time32是个long类型。(说实话听这一段老师在那绕给我听懵了,多听了几次才听了个大概),那么直接就强制类型转换,然后既然time还要个指针就给time上个空指针,这时候随机数设置好了。但问题再一次出现了。

       当rand和goto配在一起用放的位置不对会出现什么呢?我的goto end 中的end当时是写在rand下面的,导致虽然每次代码重新运行时随机值是会变动的,但是在使用goto再来一局时,随机值并没有变化,还是跟上一轮一模一样。(因为我的代码是写的跟老师不一样的,所以么。。。)既然是随机值出问题,那就从随机值找。

       第一个想法是限制了rand的值出现的问题,修改后并没有什么用。

       第二个想法是空指针出了问题?但这个又动不了。

       然后就发觉可能是end的位置放错了。(这个灵感来自于老师的代码,再来一局真的就是重新开始,而我的goto end是直接从if里面穿插了进去,直接跳过了rand进入下一个游戏循环,捋了一下代码运行流程,发现随机值并没有重新赋值给我的变量)果然将我的end往上一抬,随机值恢复正常。泪目了。

       不过还是提一句(顺带提醒自己),非必要不要用goto语句,这跟冲Q币跳过充值页面有什么区别。(被老马逮到就要南山必胜客警告)能用正常的方式就不要用goto跳来跳去,很容易出现问题。

       晚上还学了一个很好玩的东西,一段关机程序,要是将它塞进朋友电脑的服务里再开自动,夺笋啊!

       学习过程中发觉,学C数学好真的很重要,打算学到算法那一块再把数学恶补一下,希望能少掉点头发。

       又是美好的一天,愿明天的我会更好。