2013-09-24 8 views
5

2つの質問。Golang - 引数の数を確認しますか?ユーザー入力 - 戻りキー(空白行)の入力を確認する ""

1 ...私はコマンドラインでユーザーが提供する引数を必要とする小さなゲームを書いています。コマンドライン入力は "go run game.go 8"のようになります。 os.Args [0]はプログラム実行(game.go)で、os.Args [1]は入力された整数です(この場合は8)。私は、文字列を「8」取る整数に変換し、そして私は私のゲームで最大数として設定することができます

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

を書きました。ただし、番号を入力しないこともできます。この場合、プログラムの最大数はデフォルトで7になります。私の質問は、os.Args [1]が存在するかどうかをgolangで調べる方法です。存在する場合は、ユーザーの番号にmaxを設定します。存在しない場合は、max = 7と設定してください。

2 ...ゲーム中にユーザーの入力が必要です。 "?"フラグの助けを借りて、 "(間違った推測単語)"のエントリは、それらを再び試してみる "正しい推測単語"のエントリは、それらに次の質問を与え、単純に戻りキー(空白行)を押すと、ゲームを終了します。私は使用します

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

彼らのエントリを取得します。問題は、エントリまたは空白行のエントリが認識されないことです。リターンキーを押しても答えの値は変わらないので、答えは変わりません。ゲームはその前の入力を回答値として依然として進行する。明らかにこれは大きな問題であり、返答キーを押すと回答値を何らかの種類に変更する必要があります。

提案がありますか?助けてくれてありがとう。

答えて

4
  1. あなたが唯一の可能な選択肢を持っているので、あなたは単にlen(os.Args)を確認することができます - それは< 2だ場合、デフォルトのオプションを使用します。より複雑なケースについては、flagパッケージをご覧ください。

  2. fmt.Scanfスキャンしたアイテムの数を返します。これをチェックしてください。 0の場合は、答えを空の文字列に設定します。

+1

私は以前にlen(os.Args)を行っていたと思っていましたが、動作しませんでしたが、もう一度試してみました。ありがとうございました。私の2番目の質問では、リターンキーを押すだけで最後の答えが返されるので、すべてのユーザー入力の前に解答をクリアして、answer = ""が出てくるようにしなければなりませんでした。 so - answer = "" fmt.Scanf( "%s"、&answer)のように。私がanswer = ""を表明しなかった場合、答えは戻りキーを無視して、前に入力した文字列を表します。 – user1945077

関連する問題