Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据循环中的两个不同条件更新的计数器 我试图在C++中建立一个计费程序。这个小程序的一个功能是能够根据输入的时间段,更新折扣小时内的折扣分钟数和营业时间内的正常定价分钟数_C++_C - Fatal编程技术网

根据循环中的两个不同条件更新的计数器 我试图在C++中建立一个计费程序。这个小程序的一个功能是能够根据输入的时间段,更新折扣小时内的折扣分钟数和营业时间内的正常定价分钟数

根据循环中的两个不同条件更新的计数器 我试图在C++中建立一个计费程序。这个小程序的一个功能是能够根据输入的时间段,更新折扣小时内的折扣分钟数和营业时间内的正常定价分钟数,c++,c,C++,C,用户首先以如下22:00的字符串形式输入时间 然后我有一个函数,它接受字符串并将其转换为整数。例如,上面的22:00变为2200 我还有另一个帮助函数,它接受一个int,上面的int,并将它转换为十进制时间 double turnTimeToDecimal(int timeRaw){ double decimalTime; decimalTime = timeRaw * 0.01; return decimalTime; } 不打折的营业时间在上午8点到

用户首先以如下22:00的字符串形式输入时间

然后我有一个函数,它接受字符串并将其转换为整数。例如,上面的22:00变为2200

我还有另一个帮助函数,它接受一个int,上面的int,并将它转换为十进制时间

double turnTimeToDecimal(int timeRaw){

    double decimalTime;

    decimalTime = timeRaw * 0.01;

        return decimalTime;
 }
不打折的营业时间在上午8点到18点30分之间为了处理此功能,我更新了从0到1417分钟(24小时)的for循环中的两个计数器:

double myStartDecimal=0.0;
双myStopDecimal=0.0;
myStartDecimal=turnTimeToDecimal(myStartRaw);
myStopDecimal=turnTimeToDecimal(myStopRaw);
//小时和分钟开始
int hourStart=(int)楼层(myStartDecimal);
int minuteStart=(int)四舍五入(100*(myStartDecimal-hourStart));
//小时和分钟停止
int hourStop=(int)楼层(myStopDecimal);
int minuteStop=(int)四舍五入(100*(myStopDecimal-hourStop));
int totalMinutesPremium=0;
int totalMinutesDiscount=0;
int i=0;
int k=0;
对于(k=(hourStart*60)+minuteStart;k<(hourStop*60)+minuteStop+轮((double)minuteStop/100));k++){
//将根据需要更新相应的计数器
//在时间上,营业时间为8:00-18:30。
如果(小时开始>=8&&hourStop<18.5){
totalMinutesPremium++;
}否则{
总分钟折扣++;
}
}
//将给出总分钟数

不能为什么要使用循环?为什么不做数学题呢

虽然不是完整的代码答案。。。你可以填空

if( startTime >= startOfPremiumPeriod && endTime <= endOfPremiumPeriod )
   totalMinutesPremimum = endTime - startTime;
else if( startTime < startOfPremiumPeriod && endTime < startOfPremimumPeriod )
   totalMinutesDiscount = endTime - startTime;
.... etc. etc. etc.

如果(startTime>=startOfPremiumPeriod&&endTime在
for
循环中,您根据
hourStart
hourStop
分配给定分钟数,而不是取决于给定分钟数是否在营业时间内。如果通话占用折扣时间,则整个通话将被打折

“但是HourStop是一个int。hourStart也是一样”

如果不能像您在这里所做的那样将十进制值与
int
s一起使用,那么它将不起作用:

hourStop < 18.5

所以你总是会遇到相同的
if
条件(无论它是什么)

hourStop的声明在哪里?(更具体地说,它的类型是什么?)hourStart是一个浮点变量吗?我猜它是int?我建议你计算小时数,使用时间差而不是循环…这是一种非常昂贵的方法。你没有在循环中使用
k
,所以你要么只添加到
totalMinutesDiscount
或者
totalMinutesPremium
>,这可能不是您想要的。您应该尝试完全摆脱循环,因为您可以通过简单的减法找到时差。抱歉,我忽略了该信息,我已更新了上面的代码并包含了该信息。但是HourStop是一个int。从转换“22:30”开始,HourStop也适用于hours将其转换为2200?然后将其转换为
22.00
?您认为24小时内有1417分钟?只需在整数分钟内完成所有操作,并让其他人检查您的工作!如果我将其转换为双精度,会怎么样?@user1179105-不,这不起作用,它只允许您在没有警告的情况下为其分配双精度值。类型仍然是
Int
并且它仍然会截断小数点后的所有内容。@K Scott我认为,由于小时不能超过24小时,如果(endTimeif( endTime < startTime ) endTime += 1440;
hourStop < 18.5
if(hourStart >= 8 && hourStop < 18.5){