2012-05-06 7 views
16

मुझे पता है कि हस्ताक्षर हैसी रिटर्न में क्या स्कैनफ फ़ंक्शन?

int scanf(const char *format, ...) 

क्या इस पूर्णांक मूल्य से संबंधित है के लिए?

+2

बस गूगल 'वापसी scanf' का मान। आपको कुछ SO पोस्ट सहित उत्तर के साथ बहुत सारे लिंक मिलेंगे। –

+7

फ़ंक्शन भी वापस नहीं आ सकता है। हो सकता है कि आप 'int p = scanf ("% d", &g); ' – wildplasser

+3

आपका कोड गलत है। यह' int p = scanf ("% d", &g);' होना चाहिए, इसलिए यह अपरिभाषित व्यवहार है। – Flexo

उत्तर

28
man पृष्ठ से

:

NAME 
     scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf 

     ... 

RETURN VALUE 
     These functions return the number of input items successfully matched 
     and assigned, which can be fewer than provided for, or even zero in the 
     event of an early matching failure. 

     The value EOF is returned if the end of input is reached before either 
     the first successful conversion or a matching failure occurs. EOF is 
     also returned if a read error occurs, in which case the error indicator 
     for the stream (see ferror(3)) is set, and errno is set indicate the 
     error. 

आपके मामले में, scanf()0, 1 या EOF लौट सकते हैं।

पीएस के रूप में अन्य लोगों ने बताया है, अपने g के सामने एक ampersand याद कर रहे हैं: एम्परसेंड बिना

int p=scanf("%d",&g); 

, अपने कोड के व्यवहार अनिर्धारित रहता है।

+0

['scanf()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/ scanf.html) सफलतापूर्वक स्कैन किए गए आइटमों की संख्या देता है एनडी असाइन किया गया। यदि प्रारूप स्ट्रिंग '% s% d% f% * s% n% d" है, तो यह सब कुछ काम करता है तो यह 4 लौटाता है।'% * S' असाइनमेंट को दबाता है, इसलिए इसकी गणना नहीं की जाती है, और'% n' ऑफ़सेट लौटाता है और इसकी गणना नहीं की जाती है। अगर आपको 0, 1, 2, या 3 मिलते हैं, तो कुछ गलत हो गया। यदि पढ़ने के लिए कोई डेटा शेष नहीं है, तो आप केवल ईओएफ वापस प्राप्त करते हैं, या इनपुट त्रुटि होती है (प्रारूप त्रुटि नहीं, बल्कि 'हार्डवेयर' त्रुटि)। '% D" प्रारूप के साथ, केवल एक रूपांतरण है, इसलिए आपको 'EOF',' 0' या '1' मिलेगा। –

8

scanf से:

सफलता पर, फ़ंक्शन मदों की संख्या सफलतापूर्वक पढ़ा। यदि कोई मिलान विफलता होती है तो यह गणना रीडिंग की अपेक्षाकृत संख्या या कम, यहां तक ​​कि शून्य से मेल खा सकती है। किसी भी डेटा को सफलतापूर्वक पढ़ने से पहले इनपुट विफलता के मामले में, ईओएफ वापस कर दिया जाता है।

0

मुझे लगता है कि अपने कोड अभ्यस्त सही ढंग से काम है क्योंकि आप "&" scanf समारोह में भूल जाते हैं ..

int g=0; //init the variable 
int p=scanf("%d",&g); 

scanf समारोह छ चर पते पर दर्ज किया गया मान डाल देंगे।

+3

आपको क्यों लगता है कि चर को प्रारंभ करने की आवश्यकता है? –

1

तकनीकी रूप से यह यूबी (अपरिभाषित व्यवहार) है।

int g; 
int p=scanf("%d",g); 
       ^

आप लिखने के लिए एक पते के रूप में इसका उपयोग करने के लिए स्कैनफ के लिए एक प्रारंभिक पूर्णांक पास करते हैं। इस बिंदु से, कुछ भी हो सकता है। सबसे अधिक संभावना है कि आपका ऐप क्रैश होने जा रहा है।

0

तुम जो भी वीडीयू इनपुट में दे देंगे चर g में जाता है और अगर सफलतापूर्वक पढ़ा, p के बराबर होती है 1.

1

यह 1 के रूप में वापस आ जाएगी scanf रिटर्न मदों की संख्या सफलतापूर्वक पढ़ा

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