সমস্যাটি বলছে যে যদি scanf()-এর পরে fgets()/gets()/scanf() থাকে তবে এর কাজ বা আউটপুট কী হবে।
fgets()/gets() ফলোড বাই scanf()
উদাহরণ (C প্রোগ্রাম)
#include <stdio.h>
int main() {
int x;
char str[100];
scanf("%d", &x);
fgets(str, 100, stdin);
printf("x = %d, str = %s", x, str);
return 0;
}
আউটপুট
Input: 30 String Output: x = 30, str =
ব্যাখ্যা (Explanation)
fgets() এবং gets() রানটাইমে ইউজার থেকে স্ট্রিং ইনপুট নেওয়ার জন্য ব্যবহৃত হয়। উপরের কোডে যখন আমরা ইন্টিজার ভ্যালু দিয়ে এন্টার (newline) দেয়, তবে fgets() বা gets() নতুন লাইন (newline) কে ইনপুট হিসেবে নেয় বজায় ডিজায়ার্ড ইনপুট "String" নেওয়ার বদলে।
scanf() ফলোড বাই scanf()
বারবার scanf() ফলোড বাই scanf() পেতে আমরা লুপ (loop) ব্যবহার করতে পারি।
উদাহরণ (C প্রোগ্রাম)
#include <stdio.h>
int main() {
int a;
printf("enter q to quit");
do {
printf("\nenter a character and q to exit");
scanf("%c", &a);
printf("%c\n", a);
} while (a != 'q');
return 0;
}
আউটপুট
Input: abq Output: enter q to quit enter a character and q to exit a a enter a character and q to exit enter a character and q to exit b b enter a character and q to exit enter a character and q to exit q
ব্যাখ্যা (Explanation)
এখানে আমরা একটি একস্ট্রা লাইন 'enter a character and q to exit' দেখি একটি একস্ট্রা নিউ লাইনের পর,这是因为 প্রতিবার scanf() একটি নিউ লাইন ক্যারেক্টার বাফারে (buffer) রেখে দেয় যা এর পরে ফলো করা scanf() দ্বারা পড়া হয়। এই সমস্যা সমাধান করতে scanf()-এ টাইপ স্পেসিফায়ারের সাথে '\n' ব্যবহার করা যাবে যেমন scanf("%c\n"); অথবা অন্য অপশন হলো এক্সট্রা getchar() বা scanf() ব্যবহার করা একস্ট্রা নিউ লাইন পড়তে।