好吧,我正在为商店编写一个程序(只是一个学习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]
是结构
答案 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