2013-09-24 32 views
5

Dwa pytania.Golang - Sprawdź liczbę argumentów? Również wejście użytkownika - Sprawdź, czy klucz powrotu (pusty wiersz) wpis ""

1 ... Piszę małą grę, która wymaga podania argumentu przez użytkownika w linii poleceń. Wpis w wierszu poleceń będzie wyglądał jak "go uruchom game.go 8". os.Args [0] jest uruchomionym programem (game.go), a os.Args [1] jest liczbą całkowitą wpisaną (w tym przypadku 8). Pisałem

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

który przyjmuje ciąg „8”, zamienia go na liczbę całkowitą, a pozwala mi ustawić ją jako liczbę max w mojej grze. Mają jednak opcję nie wpisania numeru. W tym przypadku maksymalna liczba zostanie ustawiona na 7 w moim programie. Moje pytanie brzmi: jak mogę sprawdzić w golangu, czy os.Args [1] istnieje czy nie? Jeśli istnieje, ustaw maks. Na numer użytkownika. Jeśli nie istnieje, ustaw max = 7.

2 ... Podczas gry konieczne jest wprowadzenie danych przez użytkownika. "?" flag help, "(niepoprawne słowo)" powoduje, że próbują ponownie, "(poprawne słowo do odgadnięcia)" wpis daje im następne pytanie, a po prostu naciśnięcie klawisza powrotu (pusta linia) kończy grę. Aby uzyskać ich pozycję, używam:

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

Problem polega na tym, że wpis "" lub pusty wpis nie jest rozpoznawany. Naciśnięcie klawisza powrotu nie zmienia wartości odpowiedzi, dlatego odpowiedź pozostaje taka sama. , a gra kontynuuje swój poprzedni wpis jako wartość odpowiedzi. Oczywiście jest to duży problem, a wartość odpowiedzi musi się zmienić na "" lub w jakiś inny sposób po naciśnięciu klawisza Return.

Wszelkie sugestie? Dzięki za pomoc.

Odpowiedz

4
  1. Ponieważ masz tylko jedną z możliwych opcji, można po prostu sprawdzić len(os.Args) - czy to < 2 użyj domyślnej opcji. Aby uzyskać bardziej złożone sprawy, zapoznaj się z pakietem flag.

  2. zwraca liczbę zeskanowanych przedmiotów, więc sprawdź to. Jeśli wynosi 0, ustaw odpowiedź na pusty ciąg.

+1

Got wszystko działa^_^Myślałem zrobiłem len (os.Args) wcześniej i to nie działa, ale po prostu próbował go ponownie i tym razem udało się. Dziękuję Ci. Jeśli chodzi o moje drugie pytanie, od momentu naciśnięcia klawisza Return po prostu zwracam ostatnią odpowiedź, musiałem skasować odpowiedź przed każdym wprowadzeniem przez użytkownika, aby odpowiedź = "" miała szanse na exisitng. Podobnie jak w przypadku - answer = "" fmt.Scanf ("% s", & answer). Jeśli nie odpowiedziałbym, że odpowiedź = "", odpowiedź będzie nadal dotyczyła ciągu ostatnio wprowadzonego, ignorując klucz powrotu. – user1945077