2009-03-27 16 views
5

मैं पूर्णांक के उपयोगकर्ता इनपुट को पढ़ने की कोशिश कर रहा हूं। (जैसे सीन >> एन इनपुट; सी ++ में)
मुझे io: http://www.erlang.org/doc/man/io.html से fread bif मिला, इसलिए मैं इस तरह कोड लिखता हूं।
एरलांग में पूर्णांक कैसे पढ़ा जाए?

{ठीक है, एक्स} = कब: fread ("इनपुट:", "~ d"),
कब: प्रारूप ("~ पी ~ n", [X])।

लेकिन जब मैं इनपुट 10, erlang टर्मिनल मुझे "\ n" दे रही है रखने मैं नहीं 10 मान fread स्वचालित रूप से स्ट्रिंग में 10 और conert इस पढ़ें। मैं सीधे पूर्णांक मान कैसे पढ़ सकता हूं? क्या इसे करने का कोई तरीका है? इसे पढ़ने के लिए आपका धन्यवाद।

उत्तर

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

यह सब कुछ है।

0

एरलांग तारों को एक निश्चित सीमा के भीतर पूर्णांक की सूचियों के रूप में दर्शाता है। इसलिए इनपुट एक संख्या होगी जो "1" चरित्र का प्रतिनिधित्व करती है, जिससे आप वास्तविक प्राप्त करने के लिए ऑफ़सेट घटा सकते हैं। संख्या, क्षमा करें, समाधान का परीक्षण करने के लिए यहां वीएम नहीं है।

4

स्ट्रिंग को एक पूर्णांक में बदलने में आपकी सहायता के लिए ओटीपी में कई फ़ंक्शन हैं। तुम सिर्फ string मॉड्यूल में उपयोगकर्ता (उदाहरण के लिए न्यू लाइन तक) से एक स्ट्रिंग पढ़ें समारोह to_integer(String) साथ आप आईटी का मूल्यांकन कर सकते हैं:

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

भी list_to_integer(String) BIF (बिल्ट-इन समारोह, बस कॉल भी नहीं है एक मॉड्यूल के बिना), लेकिन यह string:to_integer(String) समारोह के रूप में के रूप में क्षमा नहीं है:

list_to_integer(String) -> int() 

आप एक badarg अपवाद मिलता है स्ट्रिंग एक पूर्णांक शामिल नहीं करता होगा।

1

यदि आप स्ट्रिंग का उपयोग करते हैं: to_integer/1, जांचें कि बाकी का मान खाली सूची है []। स्ट्रिंग की शुरुआत से फ़ंक्शन पूर्णांक, यदि कोई है, को निकाल देता है। यह आश्वस्त नहीं करता है कि पूर्ण इनपुट एक पूर्णांक में परिवर्तित हो जाता है।

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

एक उदाहरण:

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

क्यों जाँच? यदि उपयोगकर्ता की उंगली फिसल और 'टी' के बजाय 5 मारा, तो इरादा इनपुट 335 था, नहीं 33.

2

~w बजाय ~p साथ नंबर मुद्रण का प्रयास करें:

1> io:format("~w~n", [[10]]). 
[10] 
ok 
2> io:format("~p~n", [[10]]). 
"\n" 
ok 

~p फॉर्मेट स्पेसिफायर की कोशिश करता यह पता लगाने के लिए कि सूची एक स्ट्रिंग हो सकती है, लेकिन ~w कभी अनुमान नहीं लगाता है; यह सूची सूचियों के रूप में हमेशा प्रिंट करता है।

संबंधित मुद्दे