c++ - 当向下舍入的值不是 0 时,为什么这个浮点除法会产生零?
问题描述
我正在练习 C++,但我发现了一些问题:
#include <iostream>
#include <string>
using namespace std;
int main() {
int a = 2;
{
cout << a;
cout << "\n";
float a = a / 2;
cout << "a= a/2 = ";
cout << a;
}
cout << "\n";
a = 2;
{
cout << a;
cout << "\n";
float b = a / 2;
cout << "b= a/2 = ";
cout << b;
}
}
这个回报:
2
a= a/2 = 0
2
b= a/2 = 1
我想知道为什么 a = a/2 = 0 ?
谢谢
解决方案
这是一个微妙的错误。看看这段代码:
int a = 2;
{
float a = a / 2;
}
在大括号之外,名称a
指的是int a
,顶部声明的整数。但是在大括号内,一旦到达float a
声明的行,名称a
指float a
的是大括号内而不是int a
大括号外。
这是一个问题,因为线
float a = a / 2;
意思是“创建一个名为a
类型的新变量float
。哦,它需要一个初始值。没关系!给它的值float a
除以 2。” 看到这里的问题了吗?变量a
正在根据自身进行初始化,因此a / 2
计算的时间a
尚未初始化并且结果未定义。
要解决此问题,只需提供float a
一个新名称。
推荐阅读
- php - 如何在 Symfony 4 上的输入文件上显示错误?
- ios - 通过 OneDrive API 或替代方法访问 DocumentLibrary
- android - 与在 kotlin/android 中接受邀请的所有用户共享单个用户单击的所有值
- javascript - Angular 即时搜索仅在按下回车键或按下搜索图标时显示命中
- linux - 直接从脚本运行命令到另一个进程
- postgresql - postgresql 中的 slonik 是什么
- jenkins - 如何在 Jenkins 管道中传递数字密码。?
- angular - ngClass 不使用绑定从 .scss 应用样式
- node.js - Docker-compose Nodejs Mongodb 没有成功
- weblogic - 由于服务配置不断变化,消费者代理无法从队列中获取消息