2013-09-24 40 views
5

Hai câu hỏi.Golang - Kiểm tra số lượng đối số? Đồng thời Nhập Người dùng - Kiểm tra mục nhập trở về (dòng trống) ""

1 ... Tôi đang viết một trò chơi nhỏ yêu cầu đối số được cung cấp bởi người dùng trên dòng lệnh. Mục dòng lệnh sẽ giống như "go run game.go 8". os.Args [0] là chương trình chạy (game.go) và os.Args [1] là số nguyên được nhập (trong trường hợp này là 8). Tôi đã viết

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

Bắt chuỗi '8', chuyển đổi thành số nguyên và cho phép tôi đặt số đó là số tối đa trong trò chơi của mình. Tuy nhiên, họ có tùy chọn không nhập số. Trong trường hợp này, số tối đa được mặc định là 7 trong chương trình của tôi. Câu hỏi của tôi là làm thế nào để kiểm tra golang nếu os.Args [1] tồn tại hay không? Nếu nó tồn tại, hãy đặt tối đa số của người dùng. Nếu nó không tồn tại, hãy đặt max = 7.

2 ... Trong trò chơi, cần phải có đầu vào của người dùng. "?" cờ giúp, "(đoán từ không chính xác)" mục làm cho họ thử lại, "(đúng đoán từ)" nhập cho họ câu hỏi tiếp theo, và chỉ cần nhấn phím trở lại (một dòng trống) thoát khỏi trò chơi. Tôi sử dụng

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

Để có được mục nhập của họ. Vấn đề là mục nhập "" hoặc mục nhập dòng trống không được nhận dạng. Việc nhấn phím trả về không thay đổi giá trị của câu trả lời, do đó câu trả lời vẫn giữ nguyên. và trò chơi tiếp tục với mục nhập trước đó của họ vẫn là giá trị câu trả lời. Rõ ràng đây là một vấn đề lớn và giá trị câu trả lời cần phải thay đổi thành "" hoặc một số sắp xếp khi nhấn phím trả về.

Mọi đề xuất? Cảm ơn vì bất kì sự giúp đỡ.

Trả lời

4
  1. Vì bạn chỉ có một tùy chọn có thể, bạn chỉ cần kiểm tra len(os.Args) - nếu đó là < 2, hãy sử dụng tùy chọn mặc định của bạn. Đối với các trường hợp phức tạp hơn, hãy xem gói flag.

  2. fmt.Scanf trả lại số mục được quét để kiểm tra điều này. Nếu đó là 0, đặt câu trả lời thành một chuỗi rỗng.

+1

Có mọi thứ đang hoạt động^_^Tôi nghĩ tôi đã làm len (os.Args) trước đây và nó không hoạt động, nhưng tôi đã thử lại lần nữa và lần này nó hoạt động. Cảm ơn bạn. Theo như câu hỏi thứ hai của tôi, kể từ khi nhấn phím return chỉ trả về câu trả lời cuối cùng, tôi phải xóa câu trả lời trước khi mọi người dùng nhập vào để câu trả lời = "" có cơ hội xuất hiện. Giống như vậy - answer = "" fmt.Scanf ("% s", & answer). Nếu tôi không xác nhận câu trả lời = "", câu trả lời sẽ vẫn giữ nguyên cho chuỗi cuối cùng được nhập trước đó, bỏ qua khóa trả về. – user1945077

Các vấn đề liên quan