c - 我的总面积和面积公式没有计算
问题描述
所以在我正在做的项目中,我有一个以原点为中心的圆圈,我需要通过它切割一条垂直线。我正在尝试计算圆的较小比例的面积;我的输入是半径和左右手的比例。现在我只是想确保它正确地进行我的计算,并且它正在正确地计算比率,但它根本不计算比率区域。请帮忙
int main(){
float radius, left, right, total;
float ratio;
float ratioArea = ratio*pi*pow(radius, 2);
scanf("%d%d%d", &radius, &left, &right);
if(left == right)
{
printf("left and right are equal");
}
// do area calculations with righthand side
else if(left > right)
{
ratio = right / (right+left);
ratioArea = ratio * pi * pow(radius, 2);
printf("ratio= %.6f, area = %f\n", ratio, ratioArea);
}
// do area calculations with lefthand side
else if(left < right)
{
ratio = left / (left + right);
ratioArea = ratio*pi*pow(radius, 2);
printf("ratio = %.6f, area = %f\n", ratio, ratioArea);
}
return 0;
}
解决方案
第一个问题在这里:
scanf("%d%d%d", &radius, &left, &right);
%d
读取一个整数并接受一个int *
,而不是一个float *
。您需要%f
扫描一个float
.
您还需要检查是否scanf
成功:
if (scanf("%f%f%f", &radius, &left, &right) != 3) {
// handle error here
exit(EXIT_FAILURE);
}
scanf
返回成功扫描的项目数。如果返回值不是 3,则至少有一个变量未设置。
第二个(大部分是无害的)问题:
float radius, left, right, total;
float ratio;
float ratioArea = ratio*pi*pow(radius, 2);
您正在ratioArea
根据 和 的值ratio
进行radius
初始化,此时尚未初始化。我很确定这段代码有未定义的行为。
只需删除初始化并float ratioArea;
改为执行即可;您已经ratioArea
在下面使用它的每个分支中进行了设置。
推荐阅读
- java - 如何在 Spring Batch ItemWriter 中为子 bean 编写多个 XML 文件?
- android - Flutter:将串口转发到模拟器
- python - 为什么 Python 使用全局变量而不是方法参数?
- html - 为 JAWS 提供替代文本
- sql-server - 计算机帐户无法以 SYSADMIN 身份登录
- javascript - MongoDB数组变成数据库上的字符串
- jar - 构建 Corda fat-jar 客户端时出现“错误:无法找到或加载主类”
- javascript - 为什么 React 查询选择器会出错?
- javascript - 为什么 {} + [] 评估为 0?
- go - 如何设置cors设置