2009-03-27 19 views
5

Sto provando a leggere l'input dell'utente del numero intero. (come cin >> nInput; in C++)
Ho trovato io: fread bif da http://www.erlang.org/doc/man/io.html, quindi scrivo codice come questo.
Come leggere il numero intero in Erlang?

{ok, X} = io: fread ("Ingresso:", "~ d"),
io: formato ("~ p ~ n", [X]).

ma quando ingresso 10, il terminale erlang continuo dando me "\ n" non 10. assumere fread leggere automaticamente 10 e conert questo in stringa. Come posso leggere direttamente il valore intero? C'è un modo per fare questo? Grazie per aver letto questo.

risposta

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

Questo è tutto.

0

Erlang rappresenta stringhe come elenchi di numeri interi che si trovano in un determinato intervallo. Pertanto l'input sarà un numero che rappresenta il carattere "1" che potresti sottrarre un offset per ottenere l'attuale. Numero, scusa, non ho una VM qui per testare una soluzione.

4

Ci sono varie funzioni in OTP per aiutare a convertire una stringa in un numero intero. Se avete appena letto una stringa da parte dell'utente (fino al ritorno a capo, per esempio) la si può valutare con la funzione to_integer(String) nel modulo string:

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

C'è anche la list_to_integer(String) BIF (funzione built-in, basta chiamare senza un modulo), ma non è così clemente come la funzione string:to_integer(String):

list_to_integer(String) -> int() 

si otterrà un'eccezione badarg se la stringa non contiene un numero intero.

1

Se si utilizza stringa: to_integer/1, verificare che il valore di Rest sia la lista vuota []. La funzione estrae il numero intero, se esiste, dall'inizio della stringa. Non garantisce che l'intero input sia convertito in un numero intero.

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

Un esempio:

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

Perché controllare? Se il dito dell'utente scivolato e ha colpito 't' invece di 5, quindi l'ingresso previsto è 335, non 33.

2

provare a stampare il numero con ~w invece di ~p:

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

l'identificatore di tentativi formato ~p per capire se l'elenco potrebbe essere una stringa, ma ~w non indovina mai; stampa sempre elenchi come elenchi.

Problemi correlati