সি টিউটোরিয়াল, পর্ব ৬ – (‘printf()’ ফাংশন ও ‘backslash character’)

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

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

untitledআবারো সবাইকে স্বাগতম সি টিউটোরিয়ালে। পূর্বের কয়েকটি পর্বে “printf()” ফাংশন এবং “সি টিউটোরিয়াল, পর্ব (ভেরিয়েবল ডিক্লেয়ার/ঘোষনা করা)” পর্বে “scanf” ফাংশন ব্যবহার করা হয়েছে। আগামী পর্ব গুলতেও এই ফাংশন গুল বেশি ব্যবহার করা হবে তাই শিক্ষার্থীদের সুবিধার্থে আজকে এই ২ টি ফাংশন নিয়ে আলোচনা করা হবে। প্রোগ্রাম তৈরি করার মূল উদ্দেশ্যই হচ্ছে সমস্যা ইনপুট করবে সমস্যা সমাধান করবে এবং সর্বশেষ সমাধান আউটপুট আকারে প্রদর্শন করবে।

“printf()” ফাংশনঃ

এই ফাংশনটি সাধারনত আউটপুট প্রদর্শনের জন্য ব্যবহার করা হয়। অর্থাৎ প্রোগ্রাম চলাকালীন সময় যদি কোন টেক্সট টাইপ আউটপুট প্রদর্শন করার প্রয়োজন হয় তাহলে এই ফাংশনটি ব্যবহার করা হয়। একটি উদাহরন দেখা যাক-

1Codeblock ওপেন করুন ctl+shift+n প্রেস করুন। অথবা file –> New –> Empty file এ ক্লিক করুন। অথবা ১ম নম্বার ছবিটি অনুসরন করুন। এবং যে কোন লোকেসনে সেভ করুন। ৩য় ছবির মত করে নিচের কোডটুক লিখুন-

void main()

{

printf(“welcome to tutorialbd.“);

getchar();

}  

3

প্রোগ্রামটি বাইল্ড এবং রান করার জন্য F9 প্রেস করুন অথবা মেনুবার থেকে Buil à Build and run এ ক্লিক করুন। প্রোগ্রামটি বাইল্ড হবে এবং রান করবে। ২য় নম্বার ছবির মত cmd ওপেন হবে।

2টেক্সট হিসেবে কোন লেখা “printf()” ফাংশনের মাধ্যমে দেখাতে চাইলে তা ডাবল কোটেশন এর মধ্যে লিখতে হয়। অর্থাৎ ষ্টিং ডাটা টাইপ (ডাটা টাইপ নিয়ে পরবর্তিতে আলোচনা করা হবে) আকারে লিখতে হয়।  একটি ফাংশনের নামের পরে প্রথম বন্দ্ধনীর মধ্যে যা লেখা হয় তাকে আরগুমেন্ট অথবা প্যরামিটার (ফাংশন পর্বে এই সম্পর্কে বিস্তারিত আলোচনা করা হবে) বলা হয়। “printf()” ফাংশন ব্যবহার করে কোন

backslash character: টেক্সট প্রদর্শন করতে চাইলে উক্ত “printf()” ফাংশনের আরগুমেন্ট হিসাবে ষ্ট্রিং (টেক্সট) লিখতে হবে।

চলুন অন্য একটি উদাহরন দেখা যাক।

void main()

{

printf(“welcome to tutorialbd.“);

printf(“tutorialbd.com”);

getchar();

}

কোডটুক দেখে মনে হবে প্রথম লাইনে দেখাবে welcome to tutorialbd.” এবং ২য় লাইনে দেখাবে “tutorialbd.com”। চলুন দেখা যাক কি হয় পূর্বের মত করে বাইল্ড ও রান করুন। আউটপুট আসবে নিচের ৪র্থ ছবির মত।

4cmd তে দেখা যাচ্ছে welcome to tutorialbd. এর পরেই ২য় লাইনে না এসেই welcome to tutorialbd.  পরেই “tutorialbd.com” দেখাচ্ছে। কিন্তু কেন? আসলে যখন প্রথম “printf()” ফাংশনের কাজ শেষ হয়েছে ঠিক সেই স্থান থেকেই ২য় “printf() ” এর কাজ শুরু হইয়েছে। তাই ২য় লাইনে থেকে শুরু না হয়ে প্রথম “printf()” এর পরেই ২য় “printf()” প্রদর্শন করেছে। কম্পিউটারের কী-বোর্ড এর মুটামুটি সকল কী আউটপুটে প্রদর্শন সম্ভাব। কিন্তু কিছু কী এর ক্ষত্রে সোর্স কোড ব্যবহার করে প্রদর্শন করা সম্ভাব নয়। এসকল কী কে Non-Printable character বলা হয়। যেমন এন্টার, ব্যকস্পেস ইত্যাদি। এন্টার প্রস করলে কার্সর এক লাইন থেকে পরের লাইনে চলে আসে। কিন্তু প্রোগ্রামে কিছু ক্ষেত্রে এসব কী ব্যবহার করা প্রয়োজন হয়। কিন্তু এ ক্ষেত্রে আমরা এন্টার ব্যবহার করতে পারিন। কারন এন্টার প্রদর্শন করার কোন ব্যবস্থা নেই। এই কী গুলকে প্রকাশ করার জন্য backslash character ব্যবহার করা হয়। প্রোগামে কখন হয়ত একাধিক লাইনে টেক্সট প্রদর্শন করার প্রয়োজন ঠিক তখন backslash character অথবা escape sequence character ব্যবহার হয়। যেমন নতুন লাইন টেক্সট প্রদর্শনের জন্য “\n” backslash character ব্যবহার করা হয়। প্রোগ্রামের কোথায়ো যদি “\n” backslash character ব্যবহার করা হয় তাহলে প্রোগ্রাম “\n” এর পূর্বের টেক্সট এক লাইনে ও “\n” এর পরের টেক্সটটুক নতুন একটি লাইনে অর্থাৎ ২য় লাইনে দেখাবে। চলুন একটি উদাহরন দেখি। codeblock এ নচের কোড টুক লিখুন –

void main()

{

printf(“welcome to tutorialbd. \n”);

printf(“tutorialbd.com”);

getchar();

}

অথবা

void main()

{

printf(“welcome to tutorialbd. \n tutorialbd.com “);

getchar();

}

5পূর্বের ন্যায় বাইল্ড এবং রান করুন ৫ নম্বার ছবির মত cmd প্রদর্শন করবে। একটি বিষয় অবশ্যই লক্ষনীয় যে, আপনি পরপর অনেক “printf()” ফাংশন ব্যবহার করলেও ফলাফল একটি “printf()” ন্যায় প্রদর্শন করবে যদি না আপনি কোন “printf()” ফাংশনের মধ্যে “\n” ব্যবহার না করেন। চলুন একটি উদাহরন দেখা যাক-

void main()

{

printf(“welcome to tutorialbd.”);

printf(“tutorialbd.com”);

printf(“tutohost.com”);

printf(“tutorialbd.com/blog”);

getchar();

}

৬ নম্বার ছবির ন্যায় ফলাফল প্রদর্শন করবে। পুনরায় নিচের কোড টুক লিখুন

 6

void main()

{

printf(“welcome to tutorialbd.tutorialbd.comtutohost.comtutorialbd.com/blog”);

getchar();

}

পুনরায় বাইল্ড ও রান করুন। ৭ নম্বার ছবির ন্যায় cmd তে ফলাফল প্রদর্শন করবে যা পূর্বের ৬ নম্বার ছবির ফলাফলের মতই। কিন্তু আপনি  “\n” backslash character ব্যবহার করে লিখুন-

7

void main()

{

printf(“welcome to tutorialbd.\n”);

printf(“tutorialbd.com\n”);

printf(“tutohost.com\n”);

printf(“tutorialbd.com/blog\n”);

getchar();

}

অথবা

void main()

{

printf(“welcome to tutorialbd.\ntutorialbd.com\ntutohost.com\ntutorialbd.com/blog\n”);

getchar();

}

8একই ফলাফল প্রদর্শন করবে যা হবে ৮ নম্বার ছবির ন্যায়। আশা করি সবাই backslash character হিসেবে “\n” এর গুরুত্ব ও প্রয়োগ বুঝতে পেরেছেন। প্রোগ্রামে নতুন লাইন অর্থাৎ এন্টার প্রয়োগ এর সাথে সাথে কিছু ক্ষেত্রে ট্যাব (৪ টি স্পেস পরিমান ফাকা ) এরও প্রয়োজন হয়। এ ক্ষেত্রে ৪ টি স্পেস পরিমান ফাকা না রেখে “\t” backslash character ব্যবহার করা হয়। চলুন নিচের কোড টুক বাইল্ড ও রান করে দেখি।

void main()

{

printf(“Name: Emran\t class: Seven \t Roll: 02”);

getchar();

}

9নিচের ৯ নম্বার ছবির ন্যায় cmd তে ফলাদল প্রদর্শন করবে। ৯ নম্বার ছবিতে দেখা যাচ্ছে “Name: Emran” এর পর ৪ স্পেস পরিমান ফাকা রেখে “class: Seven” এবং পুনরায় ৪ স্পেস পরিমান ফাকা রেখে “Roll: 02” প্রদর্শন করছে। অন্য একটি মজার backslash character দেখা যাক। নিচের কোড টুক লিখুন এবং বাইল্ড ও রান করুন।

void main()

{

printf(“\aError…..!!!!”);

getchar();

}

প্রথমে একটি বিপ শুনবেন এবং Error…..!!!!  লেখাটি cmd তে প্রদর্শন করবে। বিপ সাধারনত এলার্ট এর জন্য ব্যবহার করা হয় অথবা Error হলেও বিপ শুনা যায়। “\a”  backslash character এর মাধ্যমে বিপ দেওয়া হয়।

এক নজরে সি ল্যংগুয়েজে ব্যবহৃত সকল backslash character গুল দেখা নেয়া যাক। যা আমাদের পরবর্তিতে প্রফেশনাল লেভেলে কাজ করার ক্ষেত্রে প্রয়োজন হবে।

Backslash Character Output

\a

Audio Alert

\b

Back Space

\f

Form Feed

\n

New Line

\r

Carriage Return

\t

Horizontal Tab

\v

Vartical Tab
Null

\N

Octal Constant

\xN

HexaDecimal Constant

\’

Single Quote

\”

Double Quote

\?

Question Mark

\\

Backslash

format specifier: “printf()” ফানংশনের মাধ্যমে শুধু মাত্র String (টেক্সট) প্রদর্শনই করা যায়না বরং বিভিন্ন ডাটা টাইপের ভেরিয়েবলের মান(ডাটা) ও প্রকাশ করা যায়। “printf()” ফাংশনের মাধ্যমে ভেরিয়েবলের ডাটা প্রকাশ করার জন্য ‘format specifier’ ব্যবহার করা হয়। সি ল্যংগুয়েজে “%” পর একটি নির্ধারিত ক্যারেকটার ব্যবহার করে format specifier তৈরি করা হয়। এক এক প্রকার আউটপুট দেখানোর জন্য এক এক ধরনের ক্যারেকটার ব্যবহার করা হয় তবে ঐ ক্যারেকটার গুল নিদিষ্ট। যেমন char টাইপ ভেরিয়েবলের ডাটা দেখানোর জন্য “%c” আবার String টাইপ ভেরিয়েবলের ডাটা দেখানোর জন্য “%s” অথবা Integer টাইপ ভেরিয়েবলের জন্য “%d” ব্যবহার করা হয়।

একটি উদাহরন দেখা যাক –

void main()

{

char name[] = “Emran”;

int roll = 2;

printf(“Name: %s \n”,name);

printf(“Roll No: %d”, roll);

getchar();

}

কোড বিশ্লেষনঃ

12(char name[] = “Emran”) : char টাইপের ভেরিয়েবলে শুধু মাত্র একটি ক্যারেকটার রাখা যায় (এ বিষয়ে ডাটা টাইপ পর্বে বিস্তারিত আলোচনা করা হবে)  । একাধিক ক্যারেকটার রাখার জন্য String ভেরিয়েবল ব্যবহার করা হয়। সাধারনত “char *variable_name” অথবা “char variable_name[]” ভাবে String টাইপ ভেরিয়েবল(পরবর্তিতে বিশাদ আলোচনা করা হবে) ডিক্লেয়ার করতে হয়। উপরক্ত কোডটুকোর ৩য় তম লাইনে “name” নামের একটি ষ্ট্রিং ভেরিয়েবল ডিক্লেয়ার করা হয়েছে এবং যার মান/ডাটা হচ্ছে “Emran”

(int roll = 2) : উক্ত লাইনে “roll” নামের একটি ইন্টেজার টাইপ ভেরিয়েবল ডিক্লেয়ার করা হয়েছে যার মান হচ্ছে “2”

(printf(“Name: %s \n”,name)): এই লাইনে “printf()” ফাংশন ব্যবহার করা হয়েছে। এখানে ২ টি আরগুমেন্ট / প্যরামিটার রয়েছে যথা। “Name: %s \n”,name একটি ফাংশনের একাধিক আরগুমেন্ট / প্যারামিটার থাকতে পারে। প্রতিটি আরগুমেন্ট / প্যরামিটার কে আলাদা করার জন্য কমা(,) ব্যবহার করা হয়। সকল “printf()” ফাংশনের প্রথম আরগুমেন্ট ষ্টিং হতে হবে। এখানে ১ম আরগুমেন্টে “Name:” হচ্ছে ষ্টিং এবং “%s” হচ্ছে format specifier ও “\n” হচ্ছে নতুন লাইনের জন্য backslash character । ২য় আরগুমেন্টে “name” হচ্ছে যে ষ্টিং টাইপ ভেরিয়েবলের ডাটা “%s” format specifier এর মাধ্যমে দেখাতে চাই তার নাম। আমরা ৩য় তম লাইনে “name” নামের ষ্টিং টাইপ ভেরিয়েবল ডিক্লেয়ার করেছি।

(printf(“Roll No: %d”, roll)): এই “printf()” ফাংশন এর ব্যখ্যাও পূর্বের মত। পূর্বের “printf()” ফাংশনে “%s” format specifier ব্যবহার করা হয়েছে String টাইপ ভেরিয়েবলের ডাটা দেখানোর জন্য কিন্তু এই “printf()” ফাংশনে  “%s” স্থলে “%d” ব্যবহার করা হয়েছে। কারন এই “printf()” এর ২য় আরগুমেন্টে “roll” নামের integer টাইপ ভেরিয়েবলের ডাটা প্রকাশ করা হয়েছে।

Num1 for format specifier: কখন কখন একটি “printf()” ফাংশনে একাধিক format specifier ব্যবহার করা হয়। সে ক্ষেত্রে format specifier এর ধারাবাহিকরা বজায় রাখা জরুরী। চলুন একটি উদাহর দেখি-

void main()

{

int num0 = 0;

int num1 = 1;

printf(“num0 Value is: %d \num1 Value is: %d”,num1, num0);

getchar();

}

কোড বিশ্লেষনঃ উপরের কোডটুকো তে ৩য় ও ৪র্থ লাইনে “num0” “num1” নামে ২টি ভেরিয়েবল ডিক্লেয়ার করা হয়েছে যাদের ভ্যলু যথাক্রমে “0” “1” । ৩য় লাইনে “printf()” ফাংশনের প্রথম আরগুমেন্টে ২টি “%d” format specifier ব্যবহার করা হয়েছে। প্রথম “%d” ইন্ডেক্স/ক্রমিক নম্বার হচ্ছে 0 এবং ২য় “%d” ইন্ডেক্স  নম্বার হচ্ছে 1  এবং ১ম আরগুমেন্ট এর পরে ২য় আরগুমেন্ট থেকে যে দুটি ভেরিয়েবলের নাম দেওয়া আছে তাদের ইন্ডেক্স নম্বার যথাক্রমে “num1” এর ইন্ডেক্স/ক্রমিক নং 0 এবং ২য় ভেরিয়েবল “num1” এর ক্রমিক নম্বার 1.

11(“printf()” ফাংশনের প্রথম আরগুমেন্ট এর পর যে সকল আরগুমেন্ট সমূহ ব্যবহার করা হয় তা সাধারনত যে সকল format specifier, ১ম আরগুমেন্টে ব্যবহার করা হয় তাদের ভেরিয়েবলের নাম। ১ম আরগুমেন্ট এর পর যে সকল ভেরিয়েবল নাম ব্যবহার করা হয় তাদের ইনেডেক্স নম্বার পর্যায়ক্রমে – 1, 2, 3…… হয়। একটি বিষয় লক্ষ্য রাখতে হবে এই ক্রম অনুসারে 0 নম্বার ইন্ডেক্স এর format specifier  0 ইন্ডেক্স নম্বার ভেরিয়েবলের ডাটা দেখাবে।)

উপরক্ত বিষয়টি কয়েকবার প্রক্টিস করলে বুঝতে সুবিধা হবে।  format specifier এর জন্য ভেরিয়েবলের ক্রমিক/ইনেডেক্স নম্বার সঠিক রাখা জরুরী। ক্রমিক/ইনেডেক্স নম্বার সঠিক না হলে ভুল ফলাফল প্রদর্শন হবে।

যথেষ্ট পরিমান সহজ করে উপস্থাপন করার চেষ্টা করেছি তারপরেও যদি কোন অংশ বোধগম্য না হয় কমেন্টের মাধ্যমে জানাবেন। সহজেই সব গুল বিষয় বুঝতে পারবেন যদি আপনি পূর্বের পর্ব গুল পরে থাকেন। পূর্বের পর্ব গুল পড়ে না থকলে প্রথমে পর্ব থেকে পড়ুন তাহলে বুঝতে সুবিধা হবে।

কথা হবে পরবর্তি পর্বে সবাই ভাল থাকুন সুস্থ থাকুন সেই আশা রেখে আজকের মত বিদায়।

3 thoughts on “সি টিউটোরিয়াল, পর্ব ৬ – (‘printf()’ ফাংশন ও ‘backslash character’)”

  1. আমি “Codeblocks-12.11-setup” ইনস্টল করছি কিন্তু কোন Code Run করছেনা।
    “Can’t find compiler executable in your configured search path’s for GNU GCC Compiler”
    বারবার এই Message দেখাচ্ছে। এই সমস্যার সমাধান জানালে উপকৃত হতাম।

    1. সি টিউটোরিয়ালের পূর্বের পর্ব গুল দেখুন তাহলে সহজেই বুঝতে পারবেন।

Leave a Comment