我有问题,我不知道为什么程序无法正常工作。
当我运行程序并插入atom c
时,程序将永远调用函数io:read()
。
感谢您的帮助,对不起我的英语。
-module(temperature).
-export([run/0, convert/2]).
run() ->
run(true).
run(true) ->
{ok, Choice} = io:read("Convert to degrees Celsius or convert to degrees Fahrenheit? c/f :"),
{ok, Temp} = io:read("Insert temperature: "),
{UnitTemp, Convert} = convert(Choice, Temp),
io:format("The converted temperature: ~f ~s\n", [Convert, UnitTemp]),
{ok, Continue} = io:read("New temperature? true/false :"),
run(Continue);
run(false) ->
ok.
convert(c, Fahrenheit) -> {'Celsius', 5 * (Fahrenheit - 32) / 9};
convert(f, Celsius) -> {'Fahrenheit', 9 * Celsius / 5 + 32}.
答案 0 :(得分:1)
io:read
读取一个字词,因此在您使用.
完成约会之前,它不会停止。
1> io:read("Enter term: ").
Enter term: {foo, bar}.
{ok,{foo,bar}}
2> io:read("This will give error: ").
This will give error: }foo
This will give error: .
{error,{1,erl_parse,["syntax error before: ","'}'"]}}
所以你只需输入c.
。
或者,如果您不想键入点,则可以使用io:get_chars/2
。第一个参数是提示,第二个参数是要读取的字符数,因此在您的情况下,它将是:
io:get_chars("prompt ", 1).
prompt c
"c"
请记住,在输入c之后,您仍然必须按Enter键,现在,您应该在字符串"c"
而不是原子c
上进行模式匹配。