Monday , December 11 2017
Home / সব ল্যাঙ্গুয়েজ / সি টিউটোরিয়াল, পর্ব ৮ – (Formate Specifier ও “scanf()” ফাংশন)

সি টিউটোরিয়াল, পর্ব ৮ – (Formate Specifier ও “scanf()” ফাংশন)

000081-librariesসবাইকে শুভেচ্ছা ও স্বাগতম জানাচ্ছি সি টিউটোরিয়ালে। গত ৫ম পর্বে ভেরিয়েবল ডিক্লেয়ার/ঘোষনা করা নিয়ে এবং সর্বশেষ ৭ম পর্বে Backslash Character নিয়ে আলোচনা করে ছিলাম। ৭ম পর্বের শেষের দিকে Formate Specifier এরও অধিকাংশ বিষয় নিয়ে আলোচনা করেছিলাম। আজকে আমরা Formate Specifier অবশষ্টি কিছু বিষয় ও “scanf()” ফাংশন নিয়ে কথা বলব।

Formate Specifier List: চলুন এক নজরে দেখে নেই কি কি Formate Specifier রয়েছে সি ল্যাংগুয়েজে এবং সেই সকল Formate Specifier গুল কোনটি কি কাজে ব্যবহার করা হয়

Formate Specifier এর নাম ব্যবহার
%c শুধু মাতে একটি অক্ষর / character প্রদর্শনের জন্য।
%d প্রকৃত সংখ্যা (integer) টাইপের ভ্যালু প্রদর্শনের জন্য।
%e দশমিক যুক্ত (Floating) ডাটা টাইপের সংখ্যা exponential notation e প্রদর্শনের জন্য।
%E দশমিক যুক্ত (Floating) ডাটা টাইপের সংখ্যা exponential notation E প্রদর্শনের জন্য।
%f দশমিক যুক্ত নাম্বার (Floating) ডাটা টাইপ ভ্যালু প্রদর্শনের জন্যা।
%g দশমিক যুক্ত (Floating) ডাটা টাইপের সংখ্যা কে %f অথবা %e  ভাবে প্রদর্শনের জন্য।
%G দশমিক যুক্ত (Floating) ডাটা টাইপের সংখ্যা কে %E ভাবে প্রদর্শনের জন্য।
%o ওকটেল ডাটা টাইপের ভ্যালু প্রদর্শনের জন্য।
%s Null Character String ডাটা প্রদর্শনের জন্য।
%u Unsigned ইন্টেজার প্রদর্শনের জন্য।
%x ছোট অক্ষরের হেক্সাডেসিমেল ভ্যাল্যু প্রদর্শনের জন্য।
%X বড় অক্ষরের হেক্সাডেসিমেল ভ্যাল্যু প্রদর্শনের জন্য।

চলুন একটি উদাহরন দেখি-

void main(){
   int roll = 331799;  // integer data type variable    
   char name[] = “Emran”;  // string data type variable     
   char grade = ‘A’;   // char data type variable    
   float gpa = 4.86;   // float data type variable    
   printf(“Roll No: %d \nName is: %s \nGrade is: %c \nGPA is: %f”, roll, name, grade, gpa); // print all declearated variable    
   getchar();  // wait untill prass any key
}

 

 

5

উপরের কোডটুক codeblock লিখুন এবং বাইল্ড ও রান করুন। নিচের ছবির  ছবির ন্যায় ফলাফল দেখাবে।2

কোড বিশ্লেষনঃ ( int roll = 331799; ) এই লাইনে এর মধ্যে roll নামের একটি integer ডাটা টাইপের variable ডিক্লেয়ার করা হয়েছে যার ভ্যালু হচ্ছে “331799”

( char name[] = “Emran”; ): এই লাইনের মাধ্যমে name নামের একটি String ডাটা টাইপের  variable ডিক্লেয়ার করা হয়েছে যার ভ্যালু হচ্ছে “Emran”String সম্পর্কে পরবর্তিতে বিস্তারিত আলোচনা করা হবে। String Variable ২ ভাবে ডিক্লেয়ার করা যায়। অন্য পদ্ধতিটি হচ্ছে char *name = “Emran”;

( char grade = ‘A’; ): grade নামের Char ডাটা টাইপের একটি ভেরিয়েবল ডিক্লেয়ার করা হয়েছে যার ভ্যালু হচ্ছে “A”

( float gpa = 4.86; ): এই লাইনের মাধ্যমে gpa নামের একটি floating ডাটা টাইপ একটি ভেরিয়েবল ডিক্লেয়ার করা হয়েছে।

( printf(“Roll No: %d \nName is: %s \nGrade is: %c \nGPA is: %f”, roll, name, grade, gpa); ) উক্ত লাইনের “printf()” ফাংশন এর কাজ সকলের জানা রয়েছে। শুধু মাত্র Formate Specifier গুলোর বর্ননা দিচ্ছি। এই “printf()” ফাংশনের ৪ টি Formate Specifier ব্যবহার করা হয়েছে।

  • %d  = roll নামের ইন্টজার টাইপের ভেরিয়েবলের ভ্যালু প্রদর্শনের জন।
  • %s = name নামের String টাইপের ভেরিয়েবলের ভ্যালু প্রদর্শনের জন্য।
  • %c = grade নামের Char টাইপের ভেরিয়েবলের ভ্যালু প্রদর্শনের জন্য ও
  • %f = gpa নামের Float টাইপের ভেরিয়েবলের ভ্যালু প্রদর্শনের জন্য।

এই Formate Specifier গুল শুধু মাত্র “printf()” ফাংশনের মধ্যে ভেরিয়েবলের ভ্যালু প্রদর্শনের জন্য ব্যবহার করা হয়না বরং “scanf()” ফাংশনেও ব্যবহার করা হয়।

Scanf(): একটি প্রোগ্রাম সমস্যা সমাধানের জন্য কম্পিঊটার শুধু মাত্র তার ইন্টারনাল / অভ্যন্তরীন থেকে অথবা এক্সটার্নাল / বহিস্ত জগতের পরিফেরাল ডিভাইস থেকেই ইনপুট নিয়ে কাজ করেনা বরং কিছু ক্ষেত্রে ইউজার এর কাছ থেকেও ইনপুট গ্রহন করে। সাধারনত “scanf()” ও “get*()” এর মাধ্যমে ব্যবহারকারী থেকে ইনপুট গ্রহন করে। একটি উদাহর লক্ষ্য করা যাক।


void main (){
  int num1;  // Declare num1 variable which is integer type variable
  num1=5;  // Store 5 value in num1 variable
  int num2;  // Declare num2 variable which is integer type variable
  num2 = 3;  // Store 5 value in num1 variable
  int sum;  // Declare sum variable which is integer type variable
  sum = num1 + num2;  // Store (num1+num2) value in sum variable
  printf(“5 + 3 = %d”,sum);
  getchar();
}

উপরের কোডটুক codeblock এ রান করুন। “5” ও “3” এর যোগফল দেখাবে। যা নিচের ছবিটির মত।

3

কোড বিশ্লেষনঃ ( int num1 ): ২য় লাইনে num1 নামের একটি ইন্টেজার ভেরিয়েবল ডিক্লেয়ার করা হয়েছে।

( num1=5; ): ৩য় লাইন অর্থাৎ num1 নামের ভেরিয়েবলের ভ্যালু নির্ধারন করা হয়েছে “5”

( int num2; ): ৪র্থ লাইন int num2; নামের একটি ইন্টেজার ভেরিয়েবল ডিক্লেয়ার করা হয়েছে।

(num2 = 3; ): এই লাইনে num2 নামের একটি ভেরিয়েবল ডিক্লেয়ার করা হয়েছে যার ভ্যালু নির্ধারন করা হয়েছে “3” ।

(int sum; ): ৬ষ্ঠ লাইনে sum নামের একটি ইন্টেজার ভেরিয়েবল ডিক্লেয়ার করা হয়েছে।

(sum = num1 + num2;  ): sum নামের ভেরিয়েবলের জন্য মান নির্ধারন করা হয়েছে যা হচ্ছে ( num1 + num2 ) এর যোগফল।

(printf(“5 + 3 = %d”,sum); ): এই লাইনের মাধ্যমে sum এর ফলাফল প্রদর্শন করা হয়েছে।

উপরের প্রোগ্রামটির মাধ্যমে ২ টি সংখ্যার যোগফল বের করা যায়। কিন্তু এর একটি সীমাবদ্ধতা রয়েছে। এই প্রোগ্রামটির মাধ্যমে শুধু মাত্র নিদিষ্ট ২ টি সংখ্যা “5” ও “3” এর যোগফল বের করা সম্ভাব। কিন্তু যদি আমরা এমন একটি প্রোগ্রাম তৈরি করি যার মাধ্যেমে যে কোন ২ টি সংখ্যার যোগ ফল বের করা সম্ভাব হবে এবং ঐ ২ টি সংখ্যা ইউজারের থেকে ইনপুট করে নিবে। চলুন একটি উদাহরন দেখি –


void main (){
   int num1;  // Declare num1 variable which is integer type variable
   scanf(“%d”, &num1);  // input a number for num1 variable and store that
   int num2;  // Declare num2 variable which is integer type variable
   scanf(“%d”, &num2);  // input a number for num2 variable and store that
   int sum;  // Declare sum variable which is integer type variable
   sum = num1 + num2;  // Store (num1+num2) value in sum variable
   printf(“%d + %d = %d”,num1, num2, sum); // display
   getchar();
}

উপরের কোডটুক codeblock এ রান করুন এবং যেকোন একটি সংখ্যা ইনপুট করুন এবং এন্টার প্রেস করুন, পুনরায় অপর একটি সংখ্যা ইনপুট করুন ওপুনরায় এন্টার প্রস করুন, এরপর কম্পিউটার ইউজারের কাছ থেকে নেওয়া ২ টি সংখ্যা যোগ করে ইউজার কে যোগফল দেখাবে। ঠিক নিচের ছবিটির মত

4

কোড বিশ্লেষনঃ (int num1): এই লাইনে num1 নামের একটি ইন্টেজার টাইপ ভেরিয়েবল ডিক্লেয়ার করা হয়েছে।

(scanf(“%d”, &num1);): এই লাইনে একটি ফাংশন ব্যবহার  করা হয়েছে। যার ২ টি আরগুমেন্ট রয়েছে। প্রথম আরগুমেন্টে Formate Specifier এবং ২য় আরগুমেন্টে “&” ও “&” এর সাথে যে “num1” রয়েছে তার মাধ্যমে বুঝানো হইয়েছে যে ১ম আরগুমেন্ট এর Formate Specifier (%d) এর ভ্যালু ২য় আরগুমেন্ট এর num1 এর ভ্যালু হিসেবে নির্ধারিত হবে। যখন প্রোগ্রাম এই লাইনটি এক্সিকিউট করবে অর্থাৎ এই লাইন এর ফলাফল হবে, প্রোগ্রাম ইউজারের কাছ থেকে ইন্টেজার টাইপ ডাটা / নাম্বার চাইবে এবং নাম্বারটি দিয়ে এন্টার প্রেস করলে ইউজারের কাছ থেকে যে নাম্বারটি নিয়েছিল ঐ নাম্বারটি num1 নামের ভেরিয়েবলের ভ্যালু হিসাবে সেট হবে।

(int num2):  num2 নামের একটি ইন্টেজার টাইপ ভেরিয়েবল ডিক্লেয়ার করা হয়েছে।

(scanf(“%d”, &num2);): এই লাইনের মাধ্যমে ইউজারের কাছ থেকে অন্য একটি ইন্টেজার টাইপ নাম্বার চাইবে এবং তা num2 নামের ভেরিয়েবলে ষ্টোর করবে।

(sum = num1 + num2;  ): sum নামের ভেরিয়েবলের জন্য মান নির্ধারন করা হয়েছে যা হচ্ছে ( num1 + num2 ) এর যোগফল।

( printf(“%d + %d = %d”,num1, num2, sum); ): এই লাইনটির মাধ্যমে num1, num2 ও sum এর ভ্যালু প্রদর্শন করা হয়েছে।

Scanf() এর গঠন হচ্ছে ঠিক এই রকম scanf(Formate Specifier, &variable_name); । এখানে ২য় আরগুমেন্টে যদি একাধিক ভ্যালু থেকে থাকে তাহলে (,) এ মাধ্যমে তাদেরকে পৃথক করতে হবে। ২য় আরগুমেন্টে একাধিক ভেরিয়েবল যদি থেকে থাকে তাহলে তাদের ইন্ডেক্স নাম্বার ও ১ম আরগুমেন্টের যদি একাধিক Formate Specifier থেকে থাকে তাদের ইন্ডেক্স নাম্বার সমান হবে। অর্থাৎ “printf()” এর মতই। ইন্ডেক্স এর বিষয়টি বুঝার জন্য ……….. অংশ দেখতে পারেন।

পাঠকের দৃষ্টি আকর্ষন করে বলছি, আপনারা যদি হঠাৎ করে সি টিউটোরিয়ালের এই অংশ পড়েন তাহলে অনেক কিছুই বুঝতে পারবেন না। তাই সি ল্যাংগুয়েজ শিখার জন্য আপনাকে অবশ্যই এই সিরিজের প্রথম থেকে পড়তে হবে।

Comments

comments

About Max

টিউটোরিয়ায়ল সংক্রান্ত যে কোন পরামর্শের জন্য কল করুন +880 1739-419745 মেইল করুন root@byteburner.com অথবা কমেন্টের মাধ্যেমে জানান।

Check Also

programmer

প্রোগ্রামার হতে চান? প্রোগ্রামার হওয়ার ১০ টিপস

যারা প্রোগ্রামার হতে চান তাদের অনেকেই চিন্তায় থাকেন কি ভাবে কি করবেন। তাদের জন্য এই …