মডিউল ১০-৪: স্ট্রিং ইনপুট স্পেস সহ

scanf("%s") দিয়ে ইনপুট নেওয়ার একটি প্রবলেম হচ্ছে, scanf ইনপুটে স্পেস পাওয়ার সাথে সাথে থেমে যায়। অর্থাৎ স্পেস সহ স্ট্রিং ইনপুট নেওয়া যায় না scanf দিয়ে।

#include<stdio.h>
int main()
{
    char a[12];     
    scanf("%s",&a);  
    printf("%s\n",a);  
    return 0;
}

কোডটি রান করে আমরা যদি Hello World ইনপুট দেই। তাহলে দেখব শুধু Hello প্রিন্ট হচ্ছে। স্পেস এর পরের অংশটুকু ইনপুট নেয় নি।

এটা scanf দিয়ে করা পসিবল না। scanf স্পেস পেলেই ইনপুট নেওয়া অফ করে দেয়। তাই এটার জন্য আমরা ২টি ফাংশন ব্যাবহার করতে পারি। gets এবং fgets।

gets কিভাবে ব্যাবহার করতে হয় আমরা দেখে নেইঃ

#include<stdio.h>
#include<string.h> // gets একটি বিল্ট-ইন ফাংশন, এটি ব্যাবহার করতে হলে এই হেডার ফাইলটি ইনক্লুড করতে হয়।
int main()
{
    char a[20];     
    gets(a);       // gets স্পেস সহ স্ট্রিং ইনপুট নিতে পারে। যতক্ষন না ইনপুটে এন্টার না দেওয়া হচ্ছে ততক্ষন gets ইনপুট নিতে থাকে।
    printf("%s",a);  // স্পেস সহ সম্পূর্ণ স্ট্রিং প্রিন্ট হবে।
    return 0;
}

এবার আমরা দেখব fgets কিভাবে ব্যাবহার করতে হয়ঃ

#include<stdio.h>
#include<string.h>  // fgets ব্যাবহার করতে হলেও এই হেডার ফাইলটি ইনক্লুড করতে হয়।
int main()
{
    char a[100];
    fgets(a,20,stdin);   // fgets এর মধ্যে শুরুতে স্ট্রিং এর নাম বলে দিতে হয়, তারপর কত সাইজ ইনপুট নিব সেটার সাইজ দিতে হয় নাল সহ, তারপর stdin এই কিওয়ার্ডটি দিতে হয়।
    printf("%s",a);
    return 0;
}

এই কোডটি রান করে আমরা যত বড় ইনপুটই দেই না কেন fgets শুধুমাত্র ১৯টি ক্যারেক্টার ইনপুট নিবে। কারন আমরা fgets এর মধ্যে ইনপুট সাইজ ২০ বলে দিয়েছি। তাই সে ১৯টি ইনপুট নিবে এবং লাস্টেরটায় নাল বসাবে।

Last updated