您当前的位置: 首页 >  c语言

暂无认证

  • 0浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C语言基础:哪儿来的32766

发布时间:2020-10-01 07:21:34 ,浏览量:0

这篇文章通过一个简单的示例程序来介绍一下如何结合使用IDE来学习C语言。

目录
  • 示例代码
  • 问题现象
  • 原因分析
  • 结果验证
  • 扩展思考
  • 编码规范
  • 总结
示例代码
#include  int main(void) { int max(int x,int y); int a, b, c; scanf("%d,%d",&a,&b); c=max(a,b); printf("max=%d\n",c); return 0; } int max(int x, int y) { int z; if (z>=y) z=x; else z=y; return (z); } 

上述的代码虽然存在很多问题,但是作为一个从来没有接触过C的小朋友,极短的时间之内就写出来的代码,值得鼓励,相较于当时开始只会写Hello World的我,已经感觉在沙滩上晒太阳了。

问题现象

问题的现象如下所示:输入1 3,返回的max是32766,本来应该是3,哪儿来的32766? 在这里插入图片描述

原因分析

稍有经验的开发者会知道这是scanf的格式化输入的问题,因为需要满足的格式是"%d,%d",输入需要是“1,3",缺少逗号会使得第二个%d实际没有获得输入,而其所对应的变量又没有初始化,编译器初始化的时候设定的值被显示了出来。

结果验证

这篇文章继续介绍一下IDE的使用,如何验证上述原因的分析,如下设定一行调试断点,然后单击Debug模式的按钮进行调试模式,并在控制台输入提示中输入1 3 在这里插入图片描述 回车之后即可看到如下内容: 在这里插入图片描述 可以看到变量a被设定为1,而变量b并没有成功设定为3,而变量b初始化时被设定为了这样的一个值,直接影响了结果。而如果我们输入1,3,则能正常动作。 在这里插入图片描述

扩展思考

本身这并没有什么太大的问题,可以理解为对于scanf格式化输入的不理解。scanf除了打比赛和学校的考试,实际用到的情况确实并不多见,不算是什么问题。但是32766这个值的背后需要继续思考一下。这样的问题在实际的项目中也会有很多,根本原因往往在于变量使用之前(比如本文的if判断)没有赋值,当然除了漏了之外,还有很多原因,比如逻辑错误导致,比如编码失误,在复杂的业务逻辑和实现逻辑的背景之下,出现类似的问题有时非常难查,所以会回归到一个非常简单的编程习惯:变量初始化。本来是变量a和b比较大小,如果简单修改一下: 在这里插入图片描述 只需要进行初始化,就可以看到,至少值的范围都在考虑范围之内。

编码规范

除了变量初始化,上述代码可能是刚入的新人经常会写出的代码,有如下建议:

  • 变量尽可能短而知意,a、b、c显然不是
  • 合理使用代码锁进
  • 所有变量尽可能进行初始化
  • 声明的部分不要写在main函数中
  • 变量的定义可以考虑写在main函数之前
  • 只有一条语句的if或者else建议规范{}的使用
  • 如果希望使用c的精简的语法写短这个功能,简单学习一下?:表达式和宏的使用,代码会短很多
总结

至于为什么是32766,实际上深入研究还有更多的知识,这里不再展开,有兴趣的可以继续研究。这篇文章主要介绍一下IDE的辅助使用方法以及一些基础的编程规范。

关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

0.3660s