अंतर (हालांकि स्पष्ट) एक अलग प्रारूप स्ट्रिंग है। आप निम्न पंक्ति डालें:
"3 "
scanf()
सफलतापूर्वक वापस आ जाएगी। अन्यथा, यह आपके इनपुट पर निर्भर करता है। scanf()
अनिवार्य रूप से व्हाइटस्पेस (टैब, रिक्त स्थान, न्यूलाइन) पर छोड़ देता है, और इनपुट स्ट्रीम में अल्फान्यूमेरिक मानों की खोज करता है। चूंकि यह व्हाइटस्पेस का पीछा कर रहा है, इसलिए पर दबाते समय इनपुट के अंत में पीछे के न्यूलाइन चरित्र के साथ लम्बा हो जाता है, इसलिए यह थोड़ा सा परिणाम है।
scanf()
आपके द्वारा प्रदान की जाने वाली प्रारूप स्ट्रिंग से सटीक रूप से मिलान करने के लिए प्रदान किए गए इनपुट की अपेक्षा करता है, अपवाद के साथ कि whitespace अक्षर एक ही सफेद स्थान चरित्र पर संपीड़ित होते हैं। यह बहुत महत्वपूर्ण हो जाता है यदि आप स्ट्रिंग-प्रोसेसिंग समकक्ष, sscanf()
के साथ डेटा के बड़े तारों को पार्स करना चाहते हैं।
आगे परीक्षण करने के लिए एक अच्छा व्यायाम कुछ इस तरह होगा: की जाँच करें और दोनों सही ढंग से और प्रारूप गलत सांत्वना दी इनपुट (यानी प्रदान करने के बाद देखते हैं कि इन पूर्णांकों का मान हैं बाद में
#include<stdio.h>
int main(void)
{
int a=0,b=0,c=0;
printf("Enter values for A, B, C, in the format: \"A B - C\"\n");
scanf("%d %d - %d", &a, &b, &c);
printf("Values: A:%d, B:%d, C:%d\n", a, b, c);
}
,: रिक्त स्थान और हाइफ़न)। यहां कुछ उदाहरण रन हैं। पहले गलत इनपुट का इस्तेमाल किया गया, दूसरा सही रूप से स्वरूपित इनपुट का उपयोग किया गया। ध्यान दें कि पहले मामले में, C
सेट भी नहीं मिलता है, क्योंकि scanf()
अप्रत्याशित व्यवहार प्रदान करेगा यदि इनपुट और स्वरूप स्ट्रिंग मेल नहीं खाते हैं। आम तौर पर, उपयोगकर्ता से इनपुट की स्ट्रिंग प्राप्त करने के लिए fgets()
जैसे कुछ का उपयोग करना बेहतर होता है, और फिर अपनी स्ट्रिंग को पार्स करने के लिए विभिन्न खोज फ़ंक्शंस (यानी: स्ट्रस्ट्र(), स्ट्रैच(), स्ट्रैट, स्ट्रैपी इत्यादि) का उपयोग करें। यह scanf()
का उपयोग करने से कहीं अधिक सुरक्षित है और यह मानते हुए कि उपयोगकर्ता गलती नहीं करेगा, या तो गलती से या जानबूझकर।
Enter values for A, B, C, in the format: "A B - C"
1 2 3
Values: A:1, B:2, C:0
Enter values for A, B, C, in the format: "A B - C"
1 2 - 3
Values: A:1, B:2, C:3
अब, एक पिछले रन पर विचार करें: आप देखेंगे कि scanf()
एकल वर्ण के लिए कॉम्पैक्ट कई लगातार खाली स्थान के पात्रों, इसलिए क्यों इन अंतिम रन वास्तव में सफल होता है:
Enter values for A, B, C, in the format: "A B - C"
1 2 - 3
Values: A:1, B:2, C:3
Enter values for A, B, C, in the format: "A B - C"
1 2 - 3
Values: A:1, B:2, C:3
तो यही कारण है कि यह अगले तक क्यों लटकता है गैर-सफेद अंतरिक्ष चरित्र इसलिए है क्योंकि यह सुनिश्चित करना चाहता है कि "ठीक है, यह सब (लम्प्ड) सफेद जगह है जिसे मैं मिलान कर सकता हूं"? –