2011-09-30 3 views
9

सी में, scanf() पैरामीटर के साथ scanf("%d %*d", &a, &b) अलग-अलग कार्य करता है। यह केवल एक चर के लिए मूल्य में प्रवेश नहीं करता है दो!स्कैनफ़() स्कैन चर (

कृपया इसे समझाएं!

scanf("%d %*d", &a, &b); 

उत्तर

15

* मूल रूप से विनिर्देशक नजरअंदाज कर दिया है इसका मतलब है (पूर्णांक पढ़ने के लिए है, लेकिन असाइन नहीं)।

man scanf का कथन:

*  Suppresses assignment. The conversion that follows occurs as 
      usual, but no pointer is used; the result of the conversion is 
      simply discarded. 
+0

लेकिन अगर मैं एक पूर्णांक को छोड़ देता हूं जो वास्तव में फ़ाइल पर मौजूद नहीं है, तो ऐसा लगता है कि fscanf विफल नहीं होता है। – Bionix1441

2

http://en.wikipedia.org/wiki/Scanf#Format_string_specifications

एक वैकल्पिक तारांकित (*) सही होने के बाद प्रतिशत प्रतीक अर्थ है कि गृहीत इस फॉर्मेट स्पेसिफायर द्वारा नहीं पढ़ा में संग्रहित किया जा रहा है एक परिवर्तनीय।

10

एस्टेरिक (*) का अर्थ है कि प्रारूप के लिए मूल्य पढ़ा जाएगा लेकिन वे चर में लिखे नहीं जाएंगे। scanf इस मान के लिए अपनी पैरामीटर सूची में परिवर्तनीय सूचक की अपेक्षा नहीं करता है। आपको लिखना चाहिए:

scanf("%d %*d",&a); 
+0

क्या हम उन सभी पात्रों को अनदेखा करने का कोई तरीका रखते हैं जिन्हें हम 'fscanf' का उपयोग करके पढ़ना चाहते हैं? मैं लाइन के अंत तक सबकुछ अनदेखा करता हूं? मैं इसे कुछ समय के लिए देख रहा हूं। – Bionix1441

+0

@ Bionix1441 'scanf' प्रारूप स्ट्रिंग को संतुष्ट करने के लिए आवश्यकतानुसार' stdin' (और 'fscanf' से फ़ाइल) से अधिक वर्ण पढ़ता है। यदि आपको अपने चर में गलत मान मिल रहे हैं तो इसका मतलब है कि आपको प्रारूप से मेल खाने में त्रुटि मिलती है। वापसी मूल्य की जांच करें। अगर यह मदद नहीं करता है, तो मुझे लगता है कि आपको उदाहरणों के साथ एक उचित प्रश्न पोस्ट करने की आवश्यकता है। –