How to read integer in Erlang?
Solution 1
1> {ok, [X]} = io:fread("input : ", "~d").
input : 10
{ok,"\n"}
2> X.
10
3> {ok, [A,B]} = io:fread("input : ", "~d,~d").
input : 456,26
{ok,[456,26]}
That's all.
Solution 2
There are various functions in OTP to help you convert a string to an integer. If you just read a string from the user (until newline for example) you can the evaluate it with the function to_integer(String)
in the string
module:
string:to_integer(String) -> {Int,Rest} | {error,Reason}
There is also the list_to_integer(String)
BIF (Built-In Function, just call without a module) but it is not as forgiving as the string:to_integer(String)
function:
list_to_integer(String) -> int()
You will get a badarg
exception if the string does not contain an integer.
Solution 3
Try printing the number with ~w
instead of ~p
:
1> io:format("~w~n", [[10]]).
[10]
ok
2> io:format("~p~n", [[10]]).
"\n"
ok
The ~p
format specifier tries to figure out whether the list might be a string, but ~w
never guesses; it always prints lists as lists.
Solution 4
If you use string:to_integer/1, check that the value of Rest is the empty list []. The function extracts the integer, if any, from the beginning of the string. It does not assure that the full input converts to an integer.
string:to_integer(String) -> {Int,Rest} | {error,Reason}
An example:
{Int, Rest} = string:to_integer("33t").
Int. % -> 33
Rest. % -> "t"
Why check? If the user's finger slipped and hit 't' instead of 5, then the intended input was 335, not 33.
Ren Lowsphere
Updated on June 04, 2022Comments
-
Ren Lowsphere almost 2 years
I looked up a matterjs rectangle object and noticed an id. Is there is any way to retrieve the rectangle object by that id?
Object Data Example:
id:5 type:body label:Rectangle Body parts:Array plugin:Object angle:0 vertices:Array position:Object