2017-07-29 4 views
0

入力された数字が600より小さい場合はループし、文字と記号が入力されている場合はループします。私はそれをすることができません。Go - ちょうど数字と他のすべてのユーザー入力を区別する

package main 

import (
    "fmt" 
    "strconv" 
) 


func main() { 
    fmt.Println("How far in metres are the people away from the spacecraft?") 
    var people string 
    fmt.Scanf("%s",&people) 
     number, _ := strconv.Atoi(people) 
     for number < 600 { 
     if (number < 0 || number > 0 || people == "0"){ 
      fmt.Println("Too Close\nTry Again") 
     var people string 
     fmt.Scanf("%s",&people) 
     number, _ := strconv.Atoi(people) 
      fmt.Println(number) 
      }else{ 
      fmt.Println("Only Number Please\nTry Again") 
      var people string 
      fmt.Scanf("%s",&people) 
      number, _ := strconv.Atoi(people) 
      fmt.Println(number) 
      } 

     } 

fmt.Println("BLAST OFF !!!") 
} 
+3

税引後営業利益は、2つの値を返します。もう1つは、あなたが無視しているエラーです。そのエラーがnilでないかどうかを確認してください。その場合は、おそらく数字ではありませんでした。 – eugenioy

+0

eugenioyは正しいです。いくつかの他の言語では、プログラムを処理しないとプログラムが動作しなくなる例外があります。 Goで関数/メソッドから返されたエラーを確実に処理する必要があります。そうしないと、プログラムは理解できる方法で動作しません。 –

答えて

0

偶然とクロノキツネが正しいです。
は、彼らがコードに何を言っているか明確にするため、ここでは一例です:

var people string 
var err error 
var number int 
for { 
    fmt.Scanf("%s",&people) 
    number, err = strconv.Atoi(people) 
    if err == nil { 
     break 
    } 
    fmt.Println("Not a number, please try again") 
} 
fmt.Println(number) 
関連する問題