কম্পিউটার টিউটোরিয়াল

C-তে scanf() এর সমস্যা যখন এর পরে fgets()/gets()/scanf() থাকে

সমস্যাটি বলছে যে যদি 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() ব্যবহার করা একস্ট্রা নিউ লাইন পড়তে।

  1. পাওয়ারশেল-এ Invoke-WebRequest ব্যবহার করে ওয়েবসাইট লিংক বের করা

  2. [FIX] Docker Daemon-এ 'unix:///var/run/docker.sock'-এ সংযোগ করা যায় না সমস্যার সমাধান

  3. ভুলে যাওয়া উইন্ডোজ ৮ পিন, পিকচার, বা টেক্সট পাসওয়ার্ড রিসেট করুন – ধাপে ধাপে গাইড

  4. উইন্ডোজ, ম্যাক এবং অনলাইনে গুগল আর্থ রেকর্ড করার সম্পূর্ণ গাইড