这是我在学习变量这一节课时的一个求两个数的平均值的代码,我突发奇想把a和b直接丢了两个值,分别是100和200,然后我在执行程序时故意输入两个随便的浮点数,然后是这样
我自己对该程序的理解是:既然他要输入两个整形数,而我输入两个浮点数,那不管怎么样程序输出都应该是100和200的平均值=150,可是程序却读到了我的第一个浮点数,这我就有点不理解为什么计算机会这么想
#include
int main()
{
int a=100, b=200;
scanf_s("%d %d", &a, &b);
double c = (a + b) / 2.0;
printf("%d和%d的平均值=%f\n", a, b, c);
return 0;
}
因为要读取的数据类型是整数,就只能读取整数的部分,当出现其他字符时,后边的变量将无法读取,所以你的输入就只能读取到8赋值给a,由于出现了其他字符(.)导致b读取失败,所以b还是原来的值。
初学者的骚操作总是令人意外,好像又情理之中,但是仔细一看又不值得推敲。scanf_s()需要两个参数。标准使用是:scanf_s(“%d”,&a,sizeof(a)[或者正整数代表空间大小])。因此,你的代码scanf_s("%d %d", &a, &b);只读取了第一个输入的数值,存储进了a的位置,允许输入值的大小,就是&b。如果你需要存储输入的第二个数,那么你需要写多两个参数。存放第二个数的地址,以及存放的空间大小。或者把scanf_s()函数换成scanf()函数就可以了。至于你定义的a,b都是整形,输入是浮点型,这个奇思异想。我想得到的结果还是浮点型的,因为浮点型比整型高级一点,数据运算过程会产生强制类型转换,不信你可以试试。