Manipulating input
BlitzMax Forums/BlitzMax Beginners Area/Manipulating input
| ||
I have a program that is supposed to manipulate user input ( numbers) and then calculates values. Problem is I get an error "unable to create string to int". Any advice? |
| ||
It would be helpful to have the line of code which throws the error. Most likely the issue is your attempting to add strings with an integer variable. |
| ||
The only thing is I don't know how input can be manipulated (like numbers are for calculating)AppTitle="Architecture->Digging a hold by Me" Type TheOnlyType Field width':Int Field length':Int Field depth':Int EndType Repeat Print "Created by Me. Cannot reproduce/sell/distribute in any form without consent" Delay 1200 Print "This super easy program calculates everything about digging a hold" Delay 1000 Print "Just type in the values. It's that easy!" width=Input("What is the width of the hole? ") Delay 700 length=Input("What is the height of the hole? ") Delay 700 depth=Input("What is the depth of the hole? ") Delay 700 Print "Calculating...hold on a sec...." Delay 1000 Print "Cubic feet of dirt to dig: " + (width%+4)(length%+4)(depth%) + " ft" Delay 500 Print "Cubic yards of dirt to dig: " + (width+4%*length%+4*depth%)/2 + " yds" Delay 500 Print "Cost to dig the hole: $" + ((width%)(length%)(depth$)) * 6 Delay 500 Print "Amount of backfill: " + ((width% + width% + length% + length%) * depth%)/27 *2 + " cubic yards" Delay 500 Print "How much dirt you have to hall away: " + ((width%+4)(length%+4)(depth%)) - (((width% + width% + length% + length%) * depth%)/27 *2) Delay 500 Print "How much $$$ halling the dirt away costs: $" + (((width%+4)(length%+4)(depth%)) - (((width% + width% + length% + length%) * depth%)/27 *2))*50 Delay 500 Print "Total cost is: $" + ((((width%+4)(length%+4)(depth%)) - (((width% + width% + length% + length%) * depth%)/27 *2))*50) + (((width%)(length%)(depth$)) * 6) Until KeyHit(27) |
| ||
One or two issues here :-) May I suggest you start your BlitzMax adventure by using either Strict or SuperStrict at the top of your .bmx file ... a bit like this : Strict ' .. the rest of your program These two modes help the compiler to better understand what you are trying to do, and will give you more useful error messages. Next. Your "width" value, you have declared inside a Type. But, you try to use it as a normal variable. Either, you don't want to use a Type, or you need to change how you use "width". If you want to use TheOnlyType, then you'll need to create a new object : Local dimensions:TheOnlyType = New TheOnlyType after which you would refer to its fields with : dimensions.width = ..... If you don't want to use the type, you can define "width" like : Local width:int To get a value from Input(), you will need to convert the result it to a number. You have two ways to do this, but the easiest is to do this: width = Int(Input("blah....")) which converts the String to an Int. This way is called casting. |
| ||
Oh ok, thanks. This will prolly' fix my problem! |
| ||
Maybe not..... Error Expression of type 'Int' cannot be invoked Strict AppTitle="Architecture->Digging a hold by ZaChO" Global width:Int Global length:Int Global depth:Int Repeat Print "Created by ZaChO. Cannot reproduce/sell/distribute in any form without consent" Delay 1200 Print "This super easy program calculates everything about digging a hold" Delay 1000 Print "Just type in the values. It's that easy!" width = Int(Input("What is the width of the hole? ")) Delay 700 length=Int(Input("What is the height of the hole? ")) Delay 700 depth=Int(Input("What is the depth of the hole? ")) Delay 700 Print "Calculating...hold on a sec...." Delay 1000 Print "Cubic feet of dirt to dig: " + (width+4)(length+4)(depth) + " ft" Delay 500 Print "Cubic yards of dirt to dig: " + (width+4*length+4*depth)/2 + " yds" Delay 500 Print "Cost to dig the hole: $" + ((width)(length)(depth)) * 6 Delay 500 Print "Amount of backfill: " + ((width + width + length + length) * depth)/27 *2 + " cubic yards" Delay 500 Print "How much dirt you have to hall away: " + ((width+4)(length+4)(depth)) - (((width + width + length + length) * depth)/27 *2) Delay 500 Print "How much $$$ halling the dirt away costs: $" + (((width+4)(length+4)(depth)) - (((width + width + length + length) * depth)/27 *2))*50 Delay 500 Print "Total cost is: $" + ((((width+4)(length+4)(depth)) - (((width + width + length + length) * depth)/27 *2))*50) + (((width)(length)(depth)) * 6) Until KeyHit(27) I really thought Blitmax could manipulate input that had a numeracle value, guess not... |
| ||
the compiler doesn't know what you are trying to do here:(width+4)(length+4)(depth) or here: ((width)(length)(depth)) the only way the compiler know it's a multiplication is with an asterisk "*". It doesn't know what to do with two sets of parenthesis unless you specify. |
| ||
Oh, but does the compiler recognize width+4? |
| ||
yes, but do you know the order of operations? this: (width+4)(length+4)(depth) is not the same as this: (width+4*length+4*depth) anyway I thought area was: width * length * depth why are you adding 4? |
| ||
you need two extra feet on each side to work on the exterior wall. when you are building a house |
| ||
this:Print "Cubic feet of dirt to dig: " + (width+4)(length+4)(depth) + " ft" needs to be this: Print "Cubic feet of dirt to dig: " + (width+4 * length+4 * depth) + " ft" as well as in all the other print commands |
| ||
"digging a hold" -> "digging a hole", I presume? |
| ||
@B-Ya, I just caught that before I read your post. My program works fine except for a few math bugs. @xlsior-didnt even see that before you mentioned it. lol |