s 在 a b c 赋值之前就计算了,始终为 0
0 × 任何数都是 0
需要把 s 的赋值 放在 scanf 之后,为了防止出错,可以在赋值之后 把四个变量都打印一下 看看
代码是顺序执行的!也就是说,虽然你在第 7 行计算了 s,但是此时 abc 都还没有从键盘赋值,此时s的值是0 。scanf 读取 abc 的值后,不会自动更新 s 的值( 因为计算 s 的语句在给 abc 赋值语句的上面,给 abc 赋值后不会再计算 s,s 的值不会改变),所以得到的结果就是错误的。
修改方法是:
把 s=(a+b+c)/2 这一句放在 scanf 这一行的后面
#include <stdio.h>
#include <math.h>
int main() {
double a, b, c, s, area;
a = 0.0, b = 0.0, c = 0.0;
printf("please input a,b,c:\n");
scanf_s("%d,%d,%d", &a, &b, &c);
s = (a + b + c) / 2;
area = sqrt(s * (s - a) * (s - b) * (s - c));
printf("area=%f\n", area);
return 0;
}
void f (int * p)//这里上面说过了,变量名是i,但是类型是int *,可以保存其他变量的地址。
{
*p=100;//上面也说过,*p就是i,i就是*p
}
int main()
{
int i=9;//这是一个普通的定义和赋值
f(&i);//这里要是调用函数,用&i,把i的地址传递给函数的参数p
cout<<"i"<<i;//结果应该是100
return 0;
}