我编写了代码将十进制分数转换为其二进制等效数.它编译得很好,但在执行时挂起
I wrote code to convert decimal fraction number to its binary equivalent. It compiles fine but when executed hangs
我编写了代码将十进制分数转换为二进制等价物。它编译得很好,但在执行时挂起。此处的代码仅打印二进制转换的前四位数字,如果数字超过 4 位,则显示"..."之后。在执行时,它挂起。帮助!
#include <iostream>
using namespace std;
int main()
{
int i, x[10];
float num;
cout << "**PROGRAM TO CONVERT DECIMAL FRACTION INTO ITS EQUIVALENT BINARY**n";
cout << "Enter a fraction in between 0 to 1 for conversion: ";
cin >> num;
if (num>=0 && num<=1)
{
i=1;
while (num!=1.000)
{
num*=2;
x[i]=num;
num=num-x[i];
i++;
}
if (i>4)
{
cout << "The binary equivalent is 0.";
for (i=1;i<=4;i++)
{
cout << x[i];
}
cout << "...";
}
else
{
cout << "The binary equivalent is 0.";
for (i=1;i<=4;i++)
{
cout << x[i];
}
}
}
else
{
cout << "The number entered is out of range.";
}
return 0;
}
第一个障碍是无限 while 循环:
假设输入数字=0.5
- 第一次迭代后,i=1, x[0]=1, num=0.0
- 第二次迭代后,i=2, x[1]=0, num=0.0
- 永远继续,i=..., x[i-]1=0, num=0.0
没有什么可以打破循环的。
while (num!=1.000)
{
num*=2;
x[i]=num;
num=num-x[i];
i++;
}
要修复,请考虑一些更改。可能还有其他问题。
- 对 while 循环施加限制(i<10 应该是一个很好的条件,因为这是
x
数组的大小(,或者 i=4,因为这是最大输出。 - while 循环的中断条件可能应该是 'num != 0',甚至更好(num> 1e-7,或其他小值(。
浮点数在尾数中有 23 位,也许是因为您分配了 x[i] 且 i 大于 9。
试试这个:
//stop when you get four bits
while (i< 5)
原始代码有几个问题:
1 对于输入 num=.5 和类似(实际上对于所有值(循环永远不会结束(dash-o 建议的修复想法(
2 数组 x[10] 溢出未定义的行为 (Edney(
3 吹毛求疵:1 不是"分数",最好检查范围 0 <= num <1 而不是 0 <= num <= 1(另见 OP 打印代码;可以添加 1(;我们可以使用 x[4] 和 0<=i <=3
也可以使用4字符串(PaulMcKenzie(。真正的">>"使用字符串处理来解析和计算二进制等价物,通过乘以 2(左狗屎(和截断小数部分,代码计算目标位。两种方法都给出了正确的相同结果;通过字符串实现,我们需要在运算符">>"实现代码中添加内部代码,以解析浮点数(小数(的有效格式,例如 3.14e-1、.2718、1e-1 等。
此修复遵循 OP:
#include <iostream>
using namespace std;
int main()
{
int i, x[5];
float num;
cout << "**PROGRAM TO CONVERT DECIMAL FRACTION INTO ITS EQUIVALENT BINARY**n";
cout << "Enter a fraction in between 0 to 1 for conversion: ";
cin >> num;
if (num>=0 && num<1)
{
i=1;
while (i<=4)
{
num*=2;
x[i]=num;
num=num-x[i];
i++;
}
cout << "The binary equivalent is 0.";
for (i=1;i<=4;i++)
{
cout << x[i];
}
if (num>0)
cout << "...";
}
else
{
cout << "The number entered is out of range.";
}
return 0;
}
这段代码没有循环(它们在代码中实现">>",位集(:
#include <iostream>
#include <bitset>
using namespace std;
int main () {
const int digits = 4;
int fraction;
float num;
cout << "**PROGRAM TO CONVERT DECIMAL FRACTION INTO ITS EQUIVALENT BINARY**n";
cout << "Enter a fraction in between 0 to 1 for conversion: ";
cin >> num;
if (num >= 0 && num < 1) {
fraction = num = num * pow (2, digits);
cout << "The binary equivalent is 0.";
cout << bitset<digits> (fraction);
if (num - fraction > 0) cout << "...";
}
else cout << "The number entered is out of range.";
}
相关文章:
- 我编写了代码将十进制分数转换为其二进制等效数.它编译得很好,但在执行时挂起
- Red Hat:使用<atomic>编译很好,但链接器找不到__atomic_store_16;什么库?
- 如果我的源文件中使用常数,则如何使编译很好地停止
- 为什么"int & const" MSVC 编译得很好?
- 用"gcc -c"通关很好地编译一个C++程序。为什么?
- C++,如果其他新文件出现问题,使用g++进行编译可以很好地工作
- C++:这个代码有什么问题吗?它编译得很好,但人们告诉我会有内存泄漏
- 这个荒谬的代码在 Clang 和 GCC 中编译得很好吗?
- 当我为调试Lua编译程序时,运行得很好,但为什么我要为发布版编译它,我得到了一个c0000005错误
- cpp文件不使用cl编译,但在Visual Studio中编译得很好
- 为什么这个模板 constexpr 函数不能在 gcc 上编译,但在 clang 上效果很好?
- C++计算器程序正在跳过if语句,即使它编译得很好
- 为什么' int; '在C语言中可以很好地编译,但在c++中却不能
- 强制转换操作符函数在g++中可以很好地编译,但在其他编译器中不行.为什么
- 为什么很少有人输入常量正确的代码?将const-correct代码编译更好/更快
- 很好地要求(不是编译时强制)子类创建者做某些事情
- 在 Cygwin 中编译:'EOF'没有在此范围内声明,在 CentOS 中编译得很好
- 为什么这个格式错误的程序在 g++ 中编译得很好
- 代码在Visual Studio中可以很好地编译,但在使用g++的Unix终端中就不行了.我在多维向量处得到一个错误.为
- c++在Eclipse CDT中编译我的代码工作得很好,但是从命令行执行会导致大量错误