2013-05-27 14 views
7

मैं एक नौसिखिया सीख रहा हूं और ऑनलाइन व्याख्यान से निम्नलिखित कोड को समझने की कोशिश कर रहा हूं। यह एक पूर्णांक के लिए एक स्ट्रिंग स्कैन करता है; यदि अक्षर का सामना करना पड़ता है, तो एसएसकेएनएफ विफल रहता है।sscanf व्यवहार/वापसी मूल्य

int n; char c; 
if (sscanf(string, " %d %c", &n, &c) == 1) 
    //return the integer 

else 
    // fail 

मैं sscanf के लिए आदमी पृष्ठों पढ़ सकते हैं और अभी भी वापसी मान जाँच और क्यों इस कोड काम करता है के बारे में उलझन में हूँ गए हैं। वे कहते हैं कि "ये फ़ंक्शन असाइन किए गए इनपुट आइटमों की संख्या लौटाते हैं"।

यदि sscanf केवल वर्णों का सामना करता है, तो यह उन्हें & सी पर लिखता है ... लेकिन उस स्थिति में & n को लिखा नहीं गया होगा। इस मामले में, मैंने सोचा होगा कि एसएसकेएनएफ का रिटर्न वैल्यू अभी भी 1 होगा?

+2

'sscanf''% d' खाने के लिए '% d' पर नहीं छोड़ेगा। यदि इसे पहले नंबर का सामना नहीं करना पड़ता है, तो यह 0 –

+0

वापस आ जाएगा। किसी कारण से एसएसकेएनएफ ने क्रमशः अनुक्रम में (प्रारूप स्ट्रिंग प्रति) पूरी तरह से बच निकला। धन्यवाद! – drjimmie1976

उत्तर

6

यदि एसएसकेएनएफ ने सफलतापूर्वक %d पढ़ा है और कुछ और नहीं है, तो यह 1 (एक पैरामीटर असाइन किया गया है) वापस आ जाएगा। यदि किसी संख्या से पहले वर्ण थे, तो यह 0 लौटाएगा (कोई पैरामीटर असाइन नहीं किया गया था क्योंकि इसे पहले पूर्णांक नहीं मिला था)। यदि अतिरिक्त वर्णों के साथ एक पूर्णांक था, तो यह 2 लौटाएगा क्योंकि यह दोनों पैरामीटर असाइन करने में सक्षम था।

+0

धन्यवाद। मैंने सोचा कि व्यवहार सिर्फ आदेश के बावजूद स्टोर करना था, इसलिए भ्रम। – drjimmie1976

2

आपको हमेशा यह सुनिश्चित कर सकते हैं कि एक समारोह रिटर्न नीचे की तरह एक printf बयान में इसके सामने:

printf("%d",sscanf(string, " %d %c", &n, &c)); 

यह शायद अपने संदेह अपने टर्मिनल पर sscanf के रिटर्न मान बाहर मुद्रण द्वारा साफ हो जाएगा।

इसके अलावा आपको यह देखना कर सकते हैं: cplusplus : sscanf

आशा है कि मदद की :)

+0

क्या आपका मतलब था 'printf ("% d \ n", sscanf (स्ट्रिंग, "% d% c", और n, &c)); ' – rootkea

+0

हाँ, उल्लेख करने के लिए धन्यवाद :) –

4

आपका sscanf(string, " %d %c") वापस आ जाएगी EOF, 0, 1 या 2:

2: अपने इनपुट से मेल खाता है निम्नलिखित
[वैकल्पिक रिक्त स्थान] [दशमलव अंक *] [वैकल्पिक रिक्त स्थान] [किसी भी चरित्र] [अतिरिक्त अनदेखा]

1: यदि आपके इनपुट के ऊपर में विफल रहा है, लेकिन निम्नलिखित
[वैकल्पिक रिक्त स्थान] का मिलान नहीं हुआ [दशमलव अंक *] [वैकल्पिक रिक्त स्थान] [कोई और अधिक डेटा]

[सुधार]
0: यदि आपके इनपुट, के बाद सफेद स्थान और एक वैकल्पिक संकेत, एक अंक नहीं मिला: उदाहरण: "z" या "-"

EOF: यदि इनपुट खाली था "" या केवल सफेद-स्थान।

  • दशमलव अंकों के एक संकेत चरित्र + या - से पहले हो सकता है।
संबंधित मुद्दे