স্ক্যানসেট (scanset) সি-তে scanf ফ্যামিলি ফাংশন দ্বারা সমর্থিত একটি স্পেসিফায়ার। এটি %[] দিয়ে রিপ্রেজেন্ট করা হয়। স্ক্যানসেটের ভেতরে শুধু এক ক্যারেক্টার বা ক্যারেক্টার সেট (কেস-সেনসিটিভ) স্পেসিফাই করা যায়। স্ক্যানসেট প্রসেস হলে scanf() শুধু স্ক্যানসেটে উল্লেখিত ক্যারেক্টারগুলো প্রসেস করতে পারে।
উদাহরণ ১: বড় হাতের অক্ষর মাত্র গ্রহণ
#include <stdio.h>
int main() {
char str[50];
printf("কিছু লিখুন: ");
scanf("%[A-Z]s", str);
printf("দেওয়া স্ট্রিং: %s", str);
}
আউটপুট
কিছু লিখুন: HElloWorld দেওয়া স্ট্রিং: HE
ছোট হাতের অক্ষর ইগনোর হয়েছে। 'W'-ও ইগনোর হয়েছে কারণ তার আগে ছোট হাতের অক্ষর ছিল।
যদি স্ক্যানসেটের প্রথম পজিশনে '^' থাকে, তবে স্পেসিফায়ার সেটি ক্যারেক্টার পাওয়ার পর পড়া বন্ধ করে দেয়।
উদাহরণ ২: নির্দিষ্ট ক্যারেক্টার পর্যন্ত পড়া
#include <stdio.h>
int main() {
char str[50];
printf("কিছু লিখুন: ");
scanf("%[^r]s", str);
printf("দেওয়া স্ট্রিং: %s", str);
}
আউটপুট
কিছু লিখুন: HelloWorld দেওয়া স্ট্রিং: HelloWo
'r' পাওয়ার পর scanf() বাকি ক্যারেক্টার ইগনোর করে। এই ফিচার ব্যবহার করে scanf()-এর স্পেসসহ স্ট্রিং নেয়ার সমস্যা সমাধান করা যায়। %[^\n] দিলে নিউলাইন পাওয়া পর্যন্ত সব ক্যারেক্টার নিবে।
উদাহরণ ৩: স্পেসসহ পুরো লাইন ইনপুট
#include <stdio.h>
int main() {
char str[50];
printf("কিছু লিখুন: ");
scanf("%[^\n]s", str);
printf("দেওয়া স্ট্রিং: %s", str);
}
আউটপুট
কিছু লিখুন: Hello World. This line has some spaces. দেওয়া স্ট্রিং: Hello World. This line has some spaces.