首页 > 解决方案 > 表中零的无限循环

问题描述

此代码将一个圆分成 X 部分并显示每个部分的弧度值表。但是当我使用高于 6 且低于 6 的值时,我得到一个 0 显示的无限循环,我得到 '0 1 2 3 4 5 6' 似乎显示的值也不是浮动的。我有使用度数的代码并且工作正常。

#include <iostream>
using namespace std;


#define pi 3.14159265359
#define pi2 6.28318530718

int nbObjets = 0;

void objetsPositionRadian(int tab[], int nbObjets);


int main(){

    int tabRadian[] = {0};
    
    std::cout << "Nombre d'objets ? ";
    std::cin >> nbObjets;

    objetsPositionRadian(tabRadian, nbObjets);

    return 0;
}

void objetsPositionRadian(int tab[], int nbObjets){
    float radian = (360/nbObjets) * (pi/180);
    for (int i = 0; i < pi2; i+=radian){
        std::cout << i << " ";
    }
    std::cout << endl;
}

标签: c++

解决方案


这里明显的举动是将i循环更改为 a double(or float) 而不是int.

除此之外,在计算 时radian360/nbObjets会进行整数除法,因此如果nbObjets> 360,它将给出 0 的结果。更改360360.0修复该问题。

但这留下了另一个问题:根据浮点数学的变幻莫测,如果你要求很多对象,有一个很好的变化,你最终会计算出比你要求的多一个对象的位置(并且可以想象甚至更多如果您要求的对象数量非常多)。

这个问题是由于您在循环中添加radian的累积错误引起的。i而不是这样做,你几乎肯定想要这个订单上的东西:

for (int i=0; i<nbObjets; i++)
    cout << i * radian;

这样,您始终可以准确地获得所需的对象数量,并且值中的任何可能错误都不会从一次迭代到下一次迭代累积。


推荐阅读