2015-10-13 70 views
4

我正在學習Erlang,我試圖從一個進程傳遞消息到另一個從stdio輸入一些輸入。愛爾蘭badarith IO輸入

這是我有的代碼(我知道我可以使用正常的功能,但這不是主題)。

-module(play). 

-compile(export_all). 

calculateArea() -> 
    receive 
    {rectangle, W, H,SenderPID} -> SenderPID ! {area,W * H}; 
    {circle, R,SenderPID} -> SenderPID ! {area,3.14 * R * R}; 
    _ -> io:format("We can only calculate area of rectangles or circles.") 
    end, 
    calculateArea(). 

doStuff() -> 
    CalculateArea = spawn(play,calculateArea,[]), 
    {ok,Width} = io:fread("Enter width","~d"), 
    {ok,Height} = io:fread("Enter height","~d"), 
    CalculateArea ! {rectangle,Width,Height,self()}, 
    receive 
    {area,Size} -> io:write(Size) 
    end, 
    io:fwrite("done"). 

當我運行play:doStuff().我得到一個{badarith,[{play,calculateArea,0,[{file,"play.erl"},{line,10}]}]}錯誤。

我不明白爲什麼,根據文檔,「〜d」會給我一個十進制值,它肯定看起來像是如果我打印它。

這裏有什麼?

回答

4

io:fread返回

Result = {ok, Terms :: [term()]} 
     | {error, {fread, FreadError :: io_lib:fread_error()}} 
     | server_no_data() 

所以WidthHeight將含有各一個單一的數字列表。通過使用{ok, [Width/Height]} = ...修復。

相關問題