2013-09-24 7 views
5

दो प्रश्न।गोलांग - तर्कों की संख्या की जांच करें? इसके अलावा उपयोगकर्ता इनपुट - रिटर्न कुंजी (रिक्त रेखा) प्रविष्टि के लिए जांच करें "

1 ... मैं एक छोटा सा गेम लिख रहा हूं जिसके लिए उपयोगकर्ता द्वारा कमांड लाइन पर एक तर्क प्रदान करने की आवश्यकता है। कमांड लाइन प्रविष्टि "go run game.go 8" की तरह दिखाई देगी। os.Args [0] प्रोग्राम रन (game.go) है, और os.Args [1] पूर्णांक दर्ज किया गया है (इस मामले में 8)। मैं

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

कौन सा स्ट्रिंग '8' लेता है, एक पूर्णांक में बदल देता है, और मुझे मेरे खेल में एक अधिकतम संख्या के रूप में सेट करने की अनुमति देता लिखा था। हालांकि, उनके पास एक संख्या दर्ज करने का विकल्प नहीं है। इस मामले में अधिकतम संख्या मेरे कार्यक्रम में 7 तक डिफ़ॉल्ट हो जाती है। मेरा सवाल यह है कि यदि मैं os.Args [1] मौजूद है या नहीं, तो मैं गोलांग में कैसे जांच करूं? यदि यह मौजूद है, तो उपयोगकर्ता के नंबर पर अधिकतम सेट करें। यदि यह अस्तित्व में नहीं है, तो अधिकतम = 7.

2 ... गेम के दौरान, उपयोगकर्ता इनपुट होना आवश्यक है। "?" झंडे मदद करते हैं, "(गलत अनुमान शब्द)" प्रविष्टि उन्हें फिर से प्रयास करती है, "(सही अनुमान शब्द)" प्रविष्टि उन्हें अगला प्रश्न देती है, और बस रिटर्न कुंजी (एक खाली रेखा) को मारने से खेल से बाहर निकलता है। मैं

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

अपनी प्रविष्टि प्राप्त करने के लिए उपयोग करें। समस्या प्रविष्टि है, या रिक्त रेखा प्रविष्टि, "" मान्यता प्राप्त नहीं है। रिटर्न कुंजी को मारना उत्तर के मूल्य को नहीं बदलता है, इसलिए उत्तर वही रहता है। , और गेम अपनी पिछली प्रविष्टि के साथ उत्तर मूल्य के रूप में अभी भी आगे बढ़ता है। जाहिर है यह एक बड़ी समस्या है और उत्तर मूल्य को रिटर्न कुंजी पर क्लिक करने के लिए "" या कुछ प्रकार में बदलने की जरूरत है।

कोई सुझाव? किसी भी मदद के लिए धन्यवाद।

उत्तर

4
  1. के बाद से आप केवल एक संभव विकल्प होता है, तो आप बस len(os.Args) जाँच कर सकते हैं - अगर यह < 2 है, अपना सामान्य विकल्प का उपयोग करें। अधिक जटिल मामलों के लिए, flag पैकेज पर एक नज़र डालें।

  2. fmt.Scanf स्कैन किए गए आइटम की संख्या लौटाता है तो इसे जांचें। यदि यह 0 है, तो उत्तर को खाली स्ट्रिंग पर सेट करें।

+1

सबकुछ काम कर रहा है^_^मैंने सोचा था कि मैंने पहले लेन (ओ.एस.एआरजी) किया था और यह काम नहीं किया था, लेकिन मैंने अभी कोशिश की और इस बार यह काम किया। धन्यवाद। जहां तक ​​मेरा दूसरा सवाल है, क्योंकि रिटर्न कुंजी को मारने से आखिरी उत्तर मिलता है, मुझे हर उपयोगकर्ता इनपुट से पहले जवाब साफ़ करना पड़ता था ताकि उत्तर = "" exisitng का मौका खड़ा होगा। ऐसा ही - उत्तर = "" fmt.Scanf ("% s", और उत्तर)। अगर मैंने जवाब = "" पर जोर नहीं दिया है, तो उत्तर अभी भी पहले दर्ज की गई स्ट्रिंग के लिए खड़ा होगा, रिटर्न कुंजी को अनदेखा कर रहा है। – user1945077

संबंधित मुद्दे