而循环效率低且不起作用

While loop being inefficient and not working

本文关键字:不起作用 效率 循环      更新时间:2023-10-16

好吧,我正在为一个商店写一个程序(只是一个学习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是对一个数字的小数进行计数的函数。

结构体的元素CCD_ 2在英语中的意思是CCD_。

pole artikli[100]是结构中元素(项目)的数量

是只有我,还是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