В вашем коде есть три проблемы: во-первых, это цикл for
в вашей функции calculation
. Это должно быть от 0 до top, а не size, так как размер должен содержать необработанные значения в позициях, которые вы не инициализируете. Считайте, что у вас есть массив из 5, скажем так:
int a[5];
a[0]=2;
a[1]=4;
теперь вы говорите, добавьте все местоположение и дайте результат следующим образом:
result=a[0]+a[1]+a[2]+a[3]+a[4];
местоположения 0 и 1 имеют 2 и 4 соответственно, но остальные имеют мусор.
Вторая проблема в вашем коде - это повторный вызов функции pop
в операторе if. для этого вы можете сделать в начале операторов цикла:
top=pop(a);
a
будет передано не app
, так как вы передали приложение в.
Наконец, добавьте еще один оператор в качестве оператора проверки или безопасного управления. w=0;
, поскольку в вашем другом недопустимом является печать, а w по-прежнему имеет предыдущее значение, что не дает правильного вывода.
также, даже если a имеет недопустимую опцию, ваши часы должны быть включены в общее количество часов, поэтому, чтобы остановить это, вы должны использовать переменную h и дать ей значение, если вход действителен, иначе он должен быть нулевым. Поэтому ваш код будет выглядеть так:
float calculation(bill *a, bill *h)
{
float units=0.0, kWh=0.0, temp=0.0, cost=0.0;
float w=0.0,total_w=0.0, total_h=0.0,hr=0.0;
for(int i=0; i<size; i++){
temp=pop(a);
w=0.0;
hr=pop(h);
if(temp == 1)
w=150;
else if(temp == 2)
w=60;
else if(temp == 3)
w=50;
else if(temp == 4)
w=2500;
else if(temp == 5)
w=1100;
else if(temp == 6)
w=275;
else if(temp == 7)
w=2500;
else if(temp == 8)
w=2100;
else if(temp == 9)
w=350;
else if(temp == 10)
w=275;
else if(temp == 11)
w=2150;
else if(temp == 12)
w=2500;
else if(temp == 13)
w=1000;
else if(temp == 14)
w=75;
else if(temp == 15)
w=8.5;
else if(temp == 16)
w=1150;
else if(temp == 17)
w=2150;
else if(temp == 18)
w=5.5;
else if(temp == 19)
w=450;
else if(temp == 20)
w=500;
else{
cout<<"Invalid Input";
hr=0;
}
total_w=total_w+w;
total_h=total_h+hr;
}
kWh=total_w*total_h*30;
units=kWh/1000;
cost=units*9;
return cost;
}