reader.ReadString प्रारंभिक डिलीमीटर को नहीं हटाता है
एक प्रोग्राम बनाने के प्रयास में जो ऐलिस या बॉब नाम के उपयोगकर्ताओं का स्वागत करता है, एक डेवलपर एक ऐसी समस्या का सामना करना पड़ा जहां वैध नामों पर भी अवांछित प्रतिक्रिया उत्पन्न हुई। प्रोग्राम ने गलती से ऐलिस और बॉब दोनों को प्रवेश से वंचित कर दिया।
समस्या
यह समस्या प्रोग्राम में रीडर.रीडस्ट्रिंग('\n') के उपयोग से उत्पन्न हुई है। . यह फ़ंक्शन वर्णों को तब तक पुनर्प्राप्त करता है जब तक कि कोई नई पंक्ति वर्ण सामने न आ जाए। हालाँकि, यह लौटाई गई स्ट्रिंग से डिलीमीटर को स्वचालित रूप से नहीं हटाता है, जिससे उपयोगकर्ता के इनपुट में एक अतिरिक्त नई लाइन शामिल हो जाती है।
Solution
इस समस्या को हल करने के लिए , दो संभावित दृष्टिकोण हैं:
1. न्यूलाइन को ट्रिम करें
मूल्यांकन से पहले इनपुट स्ट्रिंग से किसी भी अग्रणी या अनुगामी व्हाइटस्पेस को हटाने के लिए स्ट्रिंग्स.ट्रिमस्पेस फ़ंक्शन का उपयोग करें। यह समस्या पैदा करने वाले न्यूलाइन कैरेक्टर को प्रभावी ढंग से हटा देता है।
if aliceOrBob(strings.TrimSpace(text)) { fmt.Printf("Hello, ", text) }
2. ReadString
के बजाय ReadLine का उपयोग करें। वैकल्पिक रूप से, ReadString के बजाय ReadLine फ़ंक्शन का उपयोग किया जा सकता है। रीडलाइन लौटाई गई स्ट्रिंग में न्यूलाइन कैरेक्टर को शामिल किए बिना टेक्स्ट की एक पंक्ति पुनर्प्राप्त करता है।
text, _, _ := reader.ReadLine() if aliceOrBob(string(text)) { fmt.Printf("Hello, ", text) }
स्पष्टीकरण
रीडलाइन के साथ स्ट्रिंग (टेक्स्ट) का उपयोग करने का कारण यह है कि रीडलाइन एक बाइट स्लाइस लौटाता है, जबकि aliceOrBob को एक स्ट्रिंग तर्क की आवश्यकता होती है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3