2013-09-24 14 views
5

Due domande.Golang - Controlla il numero di argomenti? Anche l'input dell'utente - Controlla la chiave di ritorno (riga vuota) ""

1 ... Sto scrivendo un piccolo gioco che richiede un argomento che deve essere fornito dall'utente sulla riga di comando. La riga di comando dovrebbe apparire come "go run game.go 8". os.Args [0] è il programma eseguito (game.go), e os.Args [1] è il numero intero inserito (in questo caso 8). Ho scritto

s := os.Args[1] 
maxLetters, err := strconv.Atoi(s) 
if err != nil { 
    // handle error 
    fmt.Println(err) 
    os.Exit(2) 
} 

che prende la stringa '8', lo converte in un numero intero, e mi permette di impostarlo come un numero massimo nel mio gioco. Tuttavia, hanno la possibilità di non inserire un numero. In questo caso il numero massimo diventa predefinito a 7 nel mio programma. La mia domanda è come posso controllare in golang se os.Args [1] esiste o no? Se esiste, imposta max al numero dell'utente. Se non esiste, imposta max = 7.

2 ... Durante il gioco, è necessario l'inserimento dell'utente. "?" le bandiere aiutano, "(errata parola supposizione)" la voce fa provare di nuovo, "la voce corretta (supposizione corretta)" dà loro la prossima domanda, e semplicemente premendo il tasto di ritorno (una riga vuota) esce dal gioco. Io uso

var answer string 
fmt.Scanf("%s", &answer) 

Per ottenere il loro ingresso. Il problema è la "" voce, o la riga vuota, non è riconosciuta. Premendo il tasto Invio non cambia il valore della risposta, quindi la risposta rimane la stessa. e il gioco procede con la loro voce precedente ancora come valore di risposta. Ovviamente questo è un grosso problema e il valore della risposta deve cambiare in "" o in qualche modo dopo aver premuto il tasto Invio.

Qualche suggerimento? Grazie per qualsiasi aiuto.

risposta

4
  1. Dal momento che si dispone di una sola opzione possibile, si può semplicemente verificare len(os.Args) - se è < 2, utilizzare l'opzione di default. Per i casi più complessi, dai un'occhiata al pacchetto flag.

  2. fmt.Scanf restituisce il numero di elementi scansionati, quindi verificarlo. Se è 0, imposta la risposta su una stringa vuota.

+1

Ha funzionato tutto^_^Pensavo di aver fatto len (os.Args) in precedenza e non funzionava, ma l'ho appena provato e questa volta ha funzionato. Grazie. Per quanto riguarda la mia seconda domanda, dal momento che il tasto invio ha restituito solo l'ultima risposta, ho dovuto cancellare la risposta prima di ogni input dell'utente in modo che answer = "" potesse avere una possibilità di esisitare. Like so - answer = "" fmt.Scanf ("% s", e risposta). Se non avessi risposto answer = "", la risposta sarebbe valida per la stringa inserita in precedenza, ignorando la chiave di ritorno. – user1945077

Problemi correlati