c - 带有 if 条件的未使用变量
问题描述
我有下面的测试代码,我的程序将允许输入一个float
数字。有一个条件检查浮点值是否小于或等于1
但大于0
。然后,变量b
和c
将以一种方式定义。如果输入是 > 1
,b
并且c
将以另一种方式定义。但是,使用下面的代码,程序总是告诉我 myb
和c
未使用。但我已经在printf
. 我不知道错误是什么。谁能解释一下背后的原理?
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char* argv[])
{
float ratio = atof(argv[1]);
if (argc != 2)
{
return 1;
}
if (ratio > 0.0 && ratio <= 1.0)
{
float b = 3/4;
float c = 4/5;
}
else if (ratio > 1.0)
{
float b = 1;
float c = 2;
}
printf("b and c are %f, %f", b, c);
}
解决方案
它与范围有关。如果您在一个范围内声明一个变量,它将在该范围的末尾不再存在。大括号内的语句 { 和 } 处于同一范围内。在这里阅读更多
这样做:
int main (int argc, char* argv[])
{
if (argc != 2) return 1;
float ratio = atof(argv[1]);
float b, c;
if (ratio > 0.0 && ratio <= 1.0) {
b = 3.0/4;
c = 4.0/5;
} else if (ratio > 1.0) {
b = 1;
c = 2;
}
printf("b and c are %f, %f", b, c);
}
我也更改3/4
为3.0/4
, 因为整数算术3/4
将评估为。0
您的代码的另一个问题是您在将第一个参数转换为浮点数之后检查了参数的数量。这应该在之前完成。
推荐阅读
- javascript - 谷歌脚本在字符串中换行
- java - IllegalArgumentException:无法为类创建 @Body 转换器
- azure - Microsoft Graph API 应用程序集合
- javascript - 如何检查位置是否属于路由段HereWeGo JS?
- c# - 为什么我的异步方法构建器必须是一个类或在调试模式下运行?
- python - 试图找出 uWSGI 线程/工作者配置
- c++ - 我是否正确理解 std::memory_order 的语义?
- java - JUnit 测试在使用时抛出错误 then
- reactjs - 如果使用 AND 运算符
- sql - 最大值的平均值