scanf परिवार में **स्कैनसेट** (%[...]) कैरेक्टर सेट के आधार पर इनपुट पढ़ने की अनुमति देता है।
सिंटैक्स
%[set] // set में कैरेक्टर्स पढ़ें %[^set] // set में NOT कैरेक्टर्स पढ़ें (पहले ^ के बाद)
उदाहरण
#include <stdio.h>
int main() {
char str[50];
// केवल अपरकेस लेटर्स पढ़ें
printf("Enter uppercase only: ");
scanf("%[A-Z]", str);
printf("Got: %s\n", str);
// 'r' तक पढ़ें (r छोड़कर)
printf("Enter until 'r': ");
scanf("%[^r]", str);
printf("Got: %s\n", str);
// पूरी लाइन पढ़ें (न्यूलाइन तक)
printf("Enter a line: ");
scanf("%[^\n]", str);
printf("Got: %s\n", str);
return 0;
}
आउटपुट
Enter uppercase only: HElloWorld Got: HE Enter until 'r': HelloWorld Got: HelloWo Enter a line: Hello World. This has spaces. Got: Hello World. This has spaces.
महत्वपूर्ण बिंदु
- केस-सेंसिटिव:
%[A-Z]लोअरकेस नहीं मिलाता। - नल टर्मिनेटर:
scanfस्वचालित रूप से\0जोड़ता है। - बफर ओवरफ्लो खतरा: चौड़ाई निर्दिष्ट करें:
%49[^\n]। - लीडिंग व्हाइटस्पेस:
%[...]व्हाइटस्पेस **नहीं** छोड़ता (अन्य फॉर्मेट्स के विपरीत)। %sनहीं:%[...]के बादsन लिखें (%[A-Z]sगलत है)।
उपयोगी पैटर्न्स
| पैटर्न | प्रभाव |
|---|---|
%[^\n] | पूरी लाइन पढ़ें (स्पेस सहित) |
%[0-9] | केवल डिजिट्स पढ़ें |
%[a-zA-Z] | केवल लेटर्स पढ़ें |
%[^,] | कॉमा तक पढ़ें (CSV पार्सिंग) |