কম্পিউটার

C-তে fgets()/gets()/scanf() থাকলে scanf() নিয়ে সমস্যা


সমস্যাটি বলে যে scanf এর পরে fgets()/gets()/scanf() থাকলে কাজ বা আউটপুট কি হবে।

fgets()/gets() এর পরে scanf()

উদাহরণ

#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 =

ব্যাখ্যা

fgets() এবং gets() ব্যবহার করা হয় রান টাইমে ব্যবহারকারীর কাছ থেকে স্ট্রিং ইনপুট নিতে। আমি উপরের কোড করি যখন আমরা পূর্ণসংখ্যার মান লিখি তখন এটি স্ট্রিং মান নেবে না কারণ আমরা যখন পূর্ণসংখ্যা মানের পরে নতুন লাইন দিই, তখন fgets() বা gets() কাঙ্খিত ইনপুটের পরিবর্তে একটি ইনপুট নেবে নিউলাইন যা "স্ট্রিং" .

scanf() এর পরে একটি scanf()

বারবার scanf() এর পরে scanf() পেতে আমরা একটি লুপ ব্যবহার করতে পারি।

উদাহরণ

#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 exita
a
enter a character and q to exit
enter a character and q to exitb
b
enter a character and q to exit
enter a character and q to exitq

ব্যাখ্যা

এখানে আমরা একটি অতিরিক্ত নতুন লাইনের পরে 'একটি অক্ষর প্রবেশ করান এবং প্রস্থান করার জন্য q' একটি অতিরিক্ত লাইন দেখতে পাচ্ছি, কারণ প্রতিবার scanf() একটি বাফারে একটি নতুন লাইন অক্ষর ছেড়ে যায় যা পরবর্তী scanf() দ্বারা এটি অনুসরণ করে। . scanf() এর মত scanf(“%c\n”) টাইপ স্পেসিফায়ার দিয়ে ‘\n’ ব্যবহার করে এই সমস্যার সমাধান করতে; বা অন্য বিকল্প হল আমরা অতিরিক্ত নতুন লাইন পড়তে অতিরিক্ত getchar() বা scanf() ব্যবহার করতে পারি।


  1. PowerShell-এ Invoke-WebRequest ব্যবহার করে কিভাবে ওয়েবসাইট লিঙ্ক পাবেন?

  2. [ফিক্স] 'unix:///var/run/docker.sock' এ ডকার ডেমনের সাথে সংযোগ করা যাবে না

  3. কিভাবে ভুলে যাওয়া উইন্ডোজ 8 পিকচার/পিন/টেক্সট পাসওয়ার্ড রিসেট করবেন?

  4. উইন্ডোজ/ম্যাক/অনলাইনে গুগল আর্থ কীভাবে রেকর্ড করবেন