虽然循环效率低下而且无法正常工作

时间:2013-12-06 01:36:36

标签: c++ struct while-loop

好吧,我正在为商店编写一个程序(只是一个学习c ++的项目),我遇到了问题。白色循环似乎没有按照预期进行,程序只是通过它。

我有一个功能:

int decimali_float (pole &artikli){
    int num = artikli.cena;
    int count = 0;
    num = abs(num);
    num = num - (int)num;
    while(num >= 0.0000001){
        num *= 10;
        count++;
        num -= (int)num;
    }
    return count;
}

我的结构是这样的:

struct pole{
    int sifra;             
    string opis;            
    float cena;          
    int vlez_kol;          
    int izlez_kol;        
    float dan_stapka;     
    float iznos;          
    int datum;          
};

我已经为结构声明了一个数组:

pole artikli[100];

这是我的代码,其中跳过了while循环。

for (int i = 0; i < 5; i++){
    while(!(cin >> artikli[i].cena) || decimali_float(artikli[i]) > 2){
        cout << "Error, try again." << endl;
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }
 }

我的错误在哪里?

decimali_float是计算数字小数的函数。

结构的元素cena意味着英语中的price

pole artikli[100]是结构

中元素(文章)的数量

1 个答案:

答案 0 :(得分:1)

仅限于我,或num是一个显式设置为等于或低于0的整数值:

int num = artikli.cena;
num = abs(num);
num = num - (int)num;

显然,它总是小于它所比较的​​非零常数,并且会跳过while循环。

<强>更新

似乎主要问题已在评论中得到解决。至于后续问题,可以简单地检查是否存在从原始值中减去调整后的“cena”的残差(假设cena现在为正),而不是计算小数位数:

double cena1 = cena * 100;
if ((cena1 - floor(cena1)) > 0.000001)
    // error condition here