Input 如何在Erlang中读取整数?

Input 如何在Erlang中读取整数?,input,erlang,integer,Input,Erlang,Integer,我正在尝试读取integer的用户输入。(如cin>>nInput;在C++中) 我从中找到io:fread bif,因此我编写了如下代码。 {ok,X}=io:fread(“输入:”, “~d”),io:format(“~p~n”,[X])。 但是当我输入10时,erlang终端一直给我“\n”而不是10。我假设fread自动读取10并将其插入字符串。如何直接读取整数值?有没有办法做到这一点?感谢阅读。Erlang将字符串表示为特定范围内的整数列表。因此,输入将是一个表示字符“1”的数字,您可

我正在尝试读取integer的用户输入。(如cin>>nInput;在C++中)
我从中找到io:fread bif,因此我编写了如下代码。

{ok,X}=io:fread(“输入:”, “~d”),
io:format(“~p~n”,[X])。


但是当我输入10时,erlang终端一直给我“\n”而不是10。我假设fread自动读取10并将其插入字符串。如何直接读取整数值?有没有办法做到这一点?感谢阅读。

Erlang将字符串表示为特定范围内的整数列表。因此,输入将是一个表示字符“1”的数字,您可以减去偏移量以获得实际值。很抱歉,这里没有VM来测试解决方案。

OTP中有各种函数可以帮助您将字符串转换为整数。如果您只是从用户处读取字符串(例如,直到换行符),则可以使用
字符串
模块中的函数
to_integer(string)
对其进行求值:

string:to_integer(String) -> {Int,Rest} | {error,Reason}
还有
list\u to\u integer(String)
BIF(内置函数,无需模块即可调用),但它不如
String:to\u integer(String)
函数:

list_to_integer(String) -> int()
如果字符串不包含整数,则会出现
badarg
异常

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]}

仅此而已。

如果使用string:to_integer/1,请检查Rest的值是否为空列表[]。函数从字符串开头提取整数(如果有)。它不能保证完整输入转换为整数

string:to_integer(String) -> {Int,Rest} | {error,Reason}
例如:

{Int, Rest} = string:to_integer("33t").
Int.  % -> 33
Rest. % -> "t"

为什么要检查?如果用户的手指滑动并点击“t”而不是5,则预期输入为335,而不是33

尝试用
~w
而不是
~p
打印号码:

1> io:format("~w~n", [[10]]).
[10]
ok
2> io:format("~p~n", [[10]]).
"\n"
ok
~p
格式说明符试图确定列表是否可能是字符串,但
~w
从不猜测;它总是以列表的形式打印列表