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

এই সিরিজের পূর্বের টিউটোরিয়াল গুল।

  1. সি টিউটোরিয়াল, পর্ব ১ – (প্রোগ্রামিং ল্যাংগুয়েজের ইতিহাস)
  2. সি টিউটোরিয়াল, পর্ব ২ – (প্রোগ্রামিং ল্যংগুয়েজের সূচনা লগ্ন)
  3. সি টিউটোরিয়াল, পর্ব ৩- (সি ল্যাংগুয়েজের ইতিহাস)
  4. সি টিউটোরিয়াল, পর্ব ৪– (C প্রোগ্রাম এর ফরম্যাট)
  5. সি টিউটোরিয়াল, পর্ব ৫ – (ভেরিয়েবল ডিক্লেয়ার/ঘোষনা করা)
  6. সি টিউটোরিয়াল, পর্ব ৬ –  (‘printf()’ ফাংশন ও ‘backslash character’)

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()” এর মতই। ইন্ডেক্স এর বিষয়টি বুঝার জন্য ……….. অংশ দেখতে পারেন।

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

সবাই ভাল থাকবেন ও সুস্থ থাকবেন এবং সেই সাথে আমার আম্মুর জন্য দোয়া চাচ্ছি, কারন আমার আম্মু অনেক অসুস্থ।

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

Leave a Comment