【发布时间】:2013-09-30 15:01:12
【问题描述】:
我正在用 Erlang 开发一个游戏,现在我需要读取标准输入。我尝试了以下调用:
io:fread()
io:read()
问题是当它包含空格时,我无法读取整个字符串。所以我有以下问题:
- 当用户按下回车键时,我如何读取用户输入的字符串? (记住字符串中包含空格)
- 如何在数字 56 中转换像“56”这样的字符串?
【问题讨论】:
标签: erlang
我正在用 Erlang 开发一个游戏,现在我需要读取标准输入。我尝试了以下调用:
io:fread()
io:read()
问题是当它包含空格时,我无法读取整个字符串。所以我有以下问题:
【问题讨论】:
标签: erlang
读取线
您可以使用io:get_line/1 从控制台获取由换行符终止的字符串。
3> io:get_line("Prompt> ").
Prompt> hello world how are you?
"hello world how are you?\n"
io:read 将为您提供 erlang 术语,因此您无法读取字符串,除非您想让您的用户将字符串括在引号中。
io:fread 中的模式似乎不允许您读取包含空格的任意长度字符串。
解析整数
您可以使用erlang:list_to_integer/1 将"56" 转换为56。
5> erlang:list_to_integer("56").
56
或使用string:to_integer/1 也会返回字符串的其余部分
10> string:to_integer("56hello").
{56,"hello"}
11> string:to_integer("56").
{56,[]}
【讨论】:
关于 io:fread/2 的 erlang documentation 应该可以帮助您。
您可以使用字段长度来读取任意长度的字符(包括空格):
io:fread("Prompt> ","~20c").
Prompt> This is a sentence!!
{ok,["This is a sentence!!"]}
至于将字符串(字符列表)转换为整数,erlang:list_to_integer/1 完成了这项工作:
7> erlang:list_to_integer("645").
645
编辑:尝试使用 io:fread/2,格式序列可以通过应用某种形式的模式匹配来简化数据解析:
9> io:fread("Prompt> ","~s ~s").
Prompt> John Doe
{ok,["John","Doe"]}
【讨论】:
控制台并不是一个真正适合你的地方,因为你需要提前知道答案的格式。考虑到您允许空格,您需要知道在获得答案之前将输入多少个单词。知道了,就可以用一个字符串作为入口,以后再解析:
1> io:read("Enter a text > ").
Enter a text > "hello guy, this is my answer :o)".
{ok,"hello guy, this is my answer :o)"}
2>
坏消息是用户必须输入引号和最后一个点,对用户不友好...
【讨论】: