![]() |
[C] Help Im getting some strange answers
Im a beginner at C, and I need some help.
The problem that I have is a problem that calculates parking fee based on several variables. For instance if it is a car then the first 3 hrs is free, if after 3 hrs 1.50. There's also two more vehicles such as a truck & bus that have unique rates. Also if the vehicle is parked beyond midnight the vehicle is towed. Time is based on military time ex. 1:00 p.m. is 13:00. The way that the book wants the info entered is with 5 scanf statements: Type of vechicle? Hour vehicle entered lot (0 - 24)? Minute vehicle entered lot (0 - 59)? Hour vehicle left lot (0 - 24)? Minute vehicle left lot (0 - 59)? So basically I have 4 integers named hrEnter, minEnter, hrOut, minOut. To evaluate the time as a whole I convert them to a float, using a modulo, and add them to the hr variable ex.(12hr + .20min = 12.20). Because I did it this way I get this weird error saying : error C2296: '%' : illegal, left operand has type 'float'. Plus, I get a bunch of these warning C4244: '=' : conversion from 'double' to 'float', possible loss of data. Besides that, I just found another problem it mentions something about rounding the min. of to the next hour before creating the charge, I've never learned how to do that? This situation seems to get worse everytime I look at it. I pretty much kind of have the logic worked out, but I'm not sure on a couple of things, such as rounding numbers. Here's some of the code that I started: Code:
|
My inital suggestion would be to calculate everything in minutes. Then you are always dealing with whole numbers, so you never calculate a total of 3.955555555555 for someone's bill. I have built large-scale billing systems for a few companies, and the first thing you learn is that you never calculate anything as a float that you can calculate as an int.
Next off, you cannot use modulo division (the %) on a float because there is no remainder when dividing floats. They are floating point numbers, so 7.0/3.0 = 2.333333, not 2 remainder 1. Let me know if you need some more help, other than my random points of style. |
This program is really killing me, I've gone over it at least a dozen times.
The thing is that in the instructions they need each variable to be seperate, hrIn, hrOut, minIn, minOut, and they all have to start out as an integer. For example: Code:
ex. out @ 4:15 This is where you have this crazy calculation: if the minOut is < the minIn; Add 60 min. to minOut, now subtract the total off minOut - minIn, finally subtract 1 from hrOut. Code:
ex. out @ 4:15 Code:
for example if the minute is 30, I would do the following 30 / 100 to get 0.30 then add the hr which is 1 to 0.30, to get 1.30. Then I possibly could round 1.30 up by formating the %f statement?? As you can tell Im pretty much losing it, I gonna give it another attempt this time trying division, instead of modulo, I think that's the only thing I can think of at this point. |
It sounds like you pretty much got everything figured out, here is another way by converting everything to minutes like aoeuhtns suggested.
Code:
mins = 60*(hrOut - hrIn) + (minOut - minIn); |
Minutes are sections of an hour, each one is 1/60th, or 0.01666666666 of an hour, which doesn't make for easy, or accurate math. However, an hour converts into 60 minutes, which looks like a nice and easy round integer to me.
The formula that a-j gave you should let you calculate the entire time that they are in the parking garage. One point of style I would like to impress on you is this. "Programming languages have no order of operation" (in reality they do, but, instead of relying on it, use extra ()'s to SHOW what you mean, it works out in your favor at 11:30 at night when you are finishing of your second margirita). So instead of what a-j wrote, I would use the exact same thing, but I would put in some extra verboseness to make it look like this: mins = (60*(hrOut - hrIn)) + (minOut - minIn); |
Excellent, I don't have to convert anything. Thanks again for helping me out, a-j & aoeuhtns.
|
Im still having some problems with the time, I used some test data to test the formula, and these are the results I get.
14: 22 Out 12: 40 In ------------ and I get 2.68 as the answer, instead of 1.42. I also tested: 8 : 40 Out 8 : 20 In ------------ And I got 1. 20 instead of .20 This is the output I got after entering it into the program, also Im not sure why everything is printing out, it should only print one statement, instead it prints out both truck and bus: Code:
Type of vehicle? Code:
/* This program is created by: A Frustrated Programmer |
I now have the time thing figured out or at least kind of faked it for the moment. This will be probably be the last question that I ask about this problem.
Ok here's what my ouput is returning, but I only want the total specific to the vehicle that I picked. I figure that it must be how I set up the blocks or maybe not, Im not sure, Im so close to being done, can anyone help? Code:
Code:
|
I think either your code got mangled, or I couldn't read it anyways.
But here is my helpful tip for you, that will probably get you finished with this project: ALWAYS use {}'s after an if. ALWAYS. Literally, never, ever, ever skip out on the {}'s, pretend that it is a bug in the compiler that it will compile things without {}'s Here is another tip that I like, but never actually practice, is to put the static part of the equals before the variable part. Like (2 == foo) or ('j' == bar) if you did something like you did above (and what crashed a space probe), your compiler will warn you and fail. If you just want to know what you went wrong, here's the spoiler for you: Code:
Spoiler over here -----------------------------------------------------------------------------------------------> You used single equal signs in the if statements, overwriting the variable. Switch to double equals and you should be good. |
Zero2, just to make this thread look more pleasant, how about changing that last [code] tag to [ /code] (without the space).
|
Thank you, aoeuhtns :thumbsup: , that was it. It now works.
|
All times are GMT -8. The time now is 02:15 AM. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
Search Engine Optimization by vBSEO 3.6.0 PL2
© 2002-2012 Tilted Forum Project