buckwheat88 Posted October 10, 2005 Report Share Posted October 10, 2005 Hi, this is Liz's (blim's) son, aka "son". I have another C programming question. I have to write a program that displays the reimbursement rates for gas used while driving so many miles. The rates that are used are:0-10 miles = $.55 reimbursment per mile driven11-100 miles = $.42 reimbursment per mile driven101-500 miles = $.32 reimbursment per mile driven501+ miles = $.15 reimbursment per mile drivenThe miles traveled has to be written as an integer value, the reimbursement rate and the amount of reimbursement has to be written as doubles.I cant use any conditional statements other than if or if-else. and I cant use any functions other than printf() or scanf().This is an example as what the screen should look like:Travel# miles traveled 1576Your reimbursement will be $236.40The code that I have written so far is:/* Travel.c by Aron 10/09/2005 *//* This program computes the reimbursement* rates for gas consumed while on the job*/#include <stdio.h>int main (){ /* declaration */ int miles; double rate, amount; /* prompt and integer input */ printf("Travel\n\n\n"); printf("# miles traveled "); scanf("%lf", &miles, &amount);/* processing */if (miles <= 10) rate = .55;if (miles >= 11 && miles <= 100) rate = .42;if (miles >= 101 && miles <= 500) rate = .32;if (miles >= 501) rate = .15;/* Formula for conversion */amount = rate * miles;/* Output to screen */printf("\n\nYour reimbursement will be %lf\n");return 0;}The program runs with no errors, but the problem that I'm getting is that when it runs it says your reimbursement will be 0.000000, so I'm assuming I'm just not putting the formula in the right spot, I just don't know where to put the formula. Any help would be appreciated.Thank you-Aron Quote Link to post Share on other sites
shanenin Posted October 10, 2005 Report Share Posted October 10, 2005 I no next to nothing about c, but I noticed this. It seems your miles is getting set to 0, that is explaning why you formula is ouputting 0. I added an extra printf() to see the value of miles GNU nano 1.3.4 File: prog.c/* Travel.c by Aron 10/09/2005 *//* This program computes the reimbursement* rates for gas consumed while on the job*/#include <stdio.h>int main (){/* declaration */int miles;float rate, amount;/* prompt and integer input */printf("Travel\n\n\n");printf("# miles traveled ");scanf("%lf", &miles, &amount);/* processing */if (miles <= 10) rate = .55;if (miles >= 11 && miles <= 100) rate = .42;if (miles >= 101 && miles <= 500) rate = .32;if (miles >= 501) rate = .15;/* Formula for conversion */amount = rate * miles;/* Output to screen */printf("%d",miles);printf("\n\nYour reimbursement will be %lf\n");return 0;}it shows it being set to zero. Quote Link to post Share on other sites
buckwheat88 Posted October 10, 2005 Author Report Share Posted October 10, 2005 (edited) Oh, that might be it, that looks right... I'll go check. Thanks!*edit*Hmph, nope, good thought though, still getting the same problem, but it may be close Edited October 10, 2005 by buckwheat88 Quote Link to post Share on other sites
shanenin Posted October 10, 2005 Report Share Posted October 10, 2005 I am learning as I go. Isn't scanf() used to except user input, if so why is amount used in the scanf() function. Should just the miles be used? Quote Link to post Share on other sites
buckwheat88 Posted October 10, 2005 Author Report Share Posted October 10, 2005 (edited) Yeah, you're right. I didn't need it in there. I was writing it as I go, was thinking I was going to use it at first and didn't think about deleting it until you said something. Good call*edit*Hmph, that's weird. I don't know why it works with float but not double...Not sure if this is related, but I have an "int" value and a "double" value, but I only use the "double" conversion specifier (%lf). Should I use the int conversion specifier (%d) somewhere? Edited October 10, 2005 by buckwheat88 Quote Link to post Share on other sites
Hai-Etlik Posted October 10, 2005 Report Share Posted October 10, 2005 (edited) The problem is with your IO function calls.Make sure the format tags in the string and the arguments match up. there should be the same number of each and they should have corresponding types.%i or %d int%f float%li long int%lf long float or double("%i %i %lf", intvar1, intvar2, doublevar1)You might also consider using else to simplify the rate selection. You can do it with just 3 comparisons rather than 6. This probably isn't necessary though.You can link ifs together like this.if(test1) something1;else if (test2) something2;else if (test3) something3;else something4;If test1 is true, then something1 happens and the program jumps to the end of the block of ifs, otherwise test2 is evaluated, and if it is true, something2 happens, otherwise test3 is checked to see if something3 happens, finally if and only if none of the tests are true, something4 happens. So exactly one of the somethings happens. Edited October 10, 2005 by Hai-Etlik Quote Link to post Share on other sites
buckwheat88 Posted October 10, 2005 Author Report Share Posted October 10, 2005 (edited) @ Hai-EtlikI kinda understand what you're saying Hai-Etlik... I changed the "if" statements to "else if" statements, that worked fine, but the first part I'm kinda foggy on.Are you saying I should add something similar to this "("%i %i %lf", intvar1, intvar2, doublevar1)" into my program, only using my values instead, for example "("%lf, %lf, %d", &rate, &amount, &miles)", and should I put that in the scanf() section?@ shaneninI think I do need the "amount" added in there, but I think I need something else too, because every time I run the program with that added, no matter what number I put in, I get "-47244603.000000" Edited October 10, 2005 by buckwheat88 Quote Link to post Share on other sites
shanenin Posted October 10, 2005 Report Share Posted October 10, 2005 (edited) scanf() is used to get user input. so in your code scanf() only needs to get the input miles from the user. So scanf() should only be used with miles. the variables amount and rate are not inputed by the user. Edited October 10, 2005 by shanenin Quote Link to post Share on other sites
Hai-Etlik Posted October 10, 2005 Report Share Posted October 10, 2005 Sorry, my example wasn't really that clear. And it was JUST an example of the arguments you could pass to a printf or scanf, not necessarily ones that would be directly useful to you.If you have three format tags in the string, then there should be three arguments afterward. If you have one format tag then there should be one argument afterward. And the types should match: "%i" or "%d" should have an int argument, "%lf %lf" should have two double arguments, "%i %lf" should have an int and then a double as arguments. This applies to both scanf and printf.scanf("%i", &intvar)printf("Two doubles: %lf %lf", doublevar1, doublevar2)The important thing is that the tags and arguments match. In the scanf, the %i matches with int argument, and in the printf the two %lfs match with the two double arguments.The else if thing is just an extra bit of refinement, don't worry about it until you have everything else working, and SAVE the working version separately before you try it. Quote Link to post Share on other sites
buckwheat88 Posted October 10, 2005 Author Report Share Posted October 10, 2005 So it's kinda like what shanenin was saying earlier, I should add "amount" to the end of the final "printf()". Earlier when I attempted that it gave me a weird number every time, now when I do that it's giving me 0.000000 again.I also notice I don't have rate anywhere except for in my formula, should rate be in somewhere? Quote Link to post Share on other sites
shanenin Posted October 10, 2005 Report Share Posted October 10, 2005 (edited) the idea to programming is to split it into pieces. you could try writing what you need to do with the code in regular words(pseudo code), then make actual codeI need to get user input -what function does thisI need to use that user input to determine the rate -you are doing that with your if-else statmentsI need to get the value of amount -you are doing that with you multiplication formulaI need to print the value of amount - what function does thatjust some ideas :-) Edited October 10, 2005 by shanenin Quote Link to post Share on other sites
buckwheat88 Posted October 10, 2005 Author Report Share Posted October 10, 2005 I know this doesn't really have anything to do with the problem that we're working with now, but I fixed one minor problem that I was having. The problem was the number of decimal places for the final product. I was getting "0.000000", but I made the final floating point "$%.2lf" to make it say "$0.00" now.And I think I'm going to go to bed and work on it some more during my breaks tommorrow (it's 2 am here, have to be up at 8 am). So good night, and thanks for your help. Quote Link to post Share on other sites
Hai-Etlik Posted October 10, 2005 Report Share Posted October 10, 2005 Yes, shanenin was right, I was trying to get you to see WHY he was right.You need to know WHY things are right if you are going to be able to write code without help. You can't figure out how to fix it if you don't know what is wrong. Quote Link to post Share on other sites
shanenin Posted October 10, 2005 Report Share Posted October 10, 2005 I was getting "0.000000", but I made the final floating point "$%.2lf" to make it say "$0.00" now.I was wondering how to to do that. That works nice :-) Quote Link to post Share on other sites
buckwheat88 Posted October 11, 2005 Author Report Share Posted October 11, 2005 Figured out the problem I was having. I understood that amount had to be in there, but the program still wasn't working. After comparing the 2 programs (the one using only float that worked, and my program that still didn't work) I finally realized my problem was here:I originally had "scanf("%lf", &miles);" but miles was an integer value, not a floating point, so I had to change it to "scanf("%int", &miles);". Minor mistake that I just never noticed. Once I noticed it I was like "D'Oh! Of course!"But anyways, thanks for the help. Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.