C语言常犯错误之编译器未解之谜

发布于:2022-10-27 ⋅ 阅读:(315) ⋅ 点赞:(0)

明明代码就是这么写的怎么会输出一个不是我想要的值呢?

小王是一个有志儿童,电棍也是一个有志教师。

一天,小王问电棍,我今天要用c语言输入3,4,5这几个整数然后输出3.000000,4.000000,5.000000,明明代码没问题,编译器没报错,为啥就是得不到想要的结果呢?

答没有进行数据类型转换,函数的错误使用。

定义的是int类型的三个整数a,b,c使用scanf进行赋值,经常就有人在这时候犯错,什么少了&,该用%d的时候用%f,该用%s的时候用%c.

输入的时候,你的scanf是这么写的

scanf("%d %d %d",a,b,c);

结果到了窗口给a,b,c分别输入值3,4,5时你这么输3,4,5   (正确输入为3 4 5)

淦!这不就BBQ了吗?(你这么写编译器不会报错)

然后你打印a,b,c的值为3.000000,4.000000,5.000000时,你直接干了个printf("%f %f %f",a,b,c);

淦!能这么干嘛? a,b,c是什么类型的数值?你用%f打印?(你这么写编译器也不会报错)

然后你就得到了三个0.000000  😃

你应该怎么做?转换数据类型呀!

float a1,b1,c1;

a1=a;

b1=b;

c1=c;

printf("%f %f %f",a1,b1,c1);

然后你说,我这还有个代码有问题,为啥我算一个银行存款,连款带息的值就是不对呢?没有报错啊?

答:公式都列错了

错误公式:本金+利息=(存款*(1+利润率))^年数

这是天地银行的算法吗?🤑

所以说当我们的程序运行出现与我们预期结果不一致的情况时,既然编译器没报错而且你觉得你思考的问题解决思路(也就是算法)没问题时,或者你对这个问题思考了很久,脑袋里幻想的编译器已经能编译出一个你想要的结果时,自信点,你的思路没错!

错就错在平常你注意不到的一些小地方罢了

第一 检查你的公式写对没有(特别注意表达式的运算顺序),

第二 检查你的输入方式以及你的输入值与你输入值对应的变量类型匹不匹配是不是你该输入的值。

第三 很少见的行为就是手贱,打错了字。

比如英文输入成中文啊  想输入%s结果就是输了%c呀  printf里输&a呀  甚至打错字把变量名都打错的呀

这些一般人熟练了就很少出错误了 所以可以靠后考虑

但也是最折磨人的😇

而对于大部分编译器会报错的问题,一般在编译器下方都会报错给出原因和具体行数;

不懂英语的话直接copy,再goolge一下马上就能能清楚哪里有问题,还会有人教你怎么改;

​​​​​​​