gpt4 book ai didi

c++ - 虽然循环效率低下且无法正常工作

转载 作者:行者123 更新时间:2023-11-28 07:14:49 24 4
gpt4 key购买 nike

好的,我正在为一家商店编写一个程序(只是一个学习 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] 是结构中元素(文章)的数量

最佳答案

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

关于c++ - 虽然循环效率低下且无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20414355/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com