C Programming-এ Operator
C Programming Language-এ Operator হল এমন একটি Symbol যা Variable বা Value-এর উপর কোনো Mathematical বা Logical Operation সম্পাদন করে। C Language-এ বিভিন্ন ধরনের Operator আছে যেমন — Arithmetic, Relational, Logical, Assignment, Increment/Decrement, Conditional এবং Comma Operator। এই Operators-এর সঠিক ব্যবহার জানা C Programming শেখার ভিত্তি।
এই ওয়েবপেজে C Programming-এর সব ধরনের Operator, তাদের Precedence ও Associativity, Arithmetic Expression Evaluation, Type Conversion, Character I/O, Escape Sequence এবং Formatted I/O — সবকিছু উদাহরণসহ বাংলায় বিস্তারিত আলোচনা করা হয়েছে। প্রতিটি Topic সম্পূর্ণভাবে কভার করা হয়েছে যাতে শিক্ষার্থীরা সহজে বুঝতে পারেন।
শুরু করুন
অধ্যায় ১
Arithmetic Operator
C Programming-এ Arithmetic Operator ব্যবহৃত হয় Mathematical Calculation করার জন্য। এগুলো সংখ্যার উপর যোগ, বিয়োগ, গুণ, ভাগ এবং ভাগশেষ বের করার কাজ করে। C Language-তে মূলত ৫টি Arithmetic Operator রয়েছে। প্রতিটি Operator-এর কাজ এবং ব্যবহার নিচে উদাহরণসহ বিস্তারিত আলোচনা করা হলো।
Modulus (%) Operator শুধুমাত্র Integer-এর ক্ষেত্রে কাজ করে। Float বা Double-এর ক্ষেত্রে এটি ব্যবহার করা যায় না। Division (/) Operator-এর ক্ষেত্রে যদি দুটি Integer ভাগ করা হয় তবে ফলাফলও Integer হবে। যেমন 10/3 এর ফলাফল 3 হবে, 3.33 নয়। কিন্তু যদি একটি Operand Float হয় তবে ফলাফল Float হবে। যেমন 10.0/3 এর ফলাফল হবে 3.333333
Arithmetic Operator ব্যবহার করার সময় Data Type-এর বিষয়টি মাথায় রাখা জরুরি। Integer Division-এ ভগ্নাংশ অংশ বাদ পড়ে যায়, তাই সঠিক ফলাফল পেতে চাইলে Float বা Double Data Type ব্যবহার করতে হবে। নিচে একটি সম্পূর্ণ Program-এর উদাহরণ দেওয়া হলো:
#include <stdio.h> int main() { int a = 10, b = 3; printf("Sum: %d\n", a + b); // 13 printf("Difference: %d\n", a - b); // 7 printf("Product: %d\n", a * b); // 30 printf("Quotient: %d\n", a / b); // 3 (Integer Division) printf("Remainder: %d\n", a % b); // 1 float x = 10.0, y = 3.0; printf("Float Division: %.2f\n", x / y); // 3.33 return 0; }
উপরের Program-এ লক্ষ্য করুন যে Integer Division (a/b) এর ফলাফল 3 হয়েছে, কিন্তু Float Division (x/y) এর ফলাফল 3.33 হয়েছে। Modulus Operator শুধুমাত্র Integer-এর জন্য কাজ করে, তাই x % y লিখলে Compiler Error হবে।
গুরুত্বপূর্ণ তথ্য
Modulus (%) Operator শুধুমাত্র Integer-এর ক্ষেত্রে কাজ করে। Float বা Double-এর সাথে ব্যবহার করলে Compiler Error হবে।
মনে রাখবেন
Integer Division-এ ভগ্নাংশ অংশ বাদ পড়ে যায়। সঠিক ভাগফল পেতে Float বা Double ব্যবহার করুন।
অধ্যায় ২
Relational Operator
Relational Operator দুটি Value-এর মধ্যে তুলনা করে এবং ফলাফল হিসেবে 1 (True) অথবা 0 (False) রিটার্ন করে। Condition Check করার জন্য এগুলো খুব গুরুত্বপূর্ণ, বিশেষ করে if-else, while, for Loop-এর ক্ষেত্রে। C Language-তে ৬টি Relational Operator রয়েছে। প্রতিটি Operator-এর কাজ এবং ব্যবহার নিচে উদাহরণসহ আলোচনা করা হলো।
== (Equal To)
দুটি Value সমান কিনা পরীক্ষা করে।
5 == 5 → 1 (True)
5 == 3 → 0 (False)
!= (Not Equal)
দুটি Value অসমান কিনা পরীক্ষা করে।
5 != 3 → 1 (True)
5 != 5 → 0 (False)
> (Greater Than)
বামের Value ডানদিকের চেয়ে বড় কিনা।
7 > 3 → 1 (True)
3 > 7 → 0 (False)
< (Less Than)
বামের Value ডানদিকের চেয়ে ছোট কিনা।
3 < 7 → 1 (True)
7 < 3 → 0 (False)
>= (Greater or Equal)
বামের Value ডানদিকের চেয়ে বড় বা সমান কিনা।
5 >= 5 → 1 (True)
3 >= 5 → 0 (False)
<= (Less or Equal)
বামের Value ডানদিকের চেয়ে ছোট বা সমান কিনা।
3 <= 5 → 1 (True)
7 <= 5 → 0 (False)
Relational Operator-এর ফলাফল সবসময় Integer হয় — হয় 1 (True) অথবা 0 (False)। C Language-তে কোনো শূন্য নয় এমন Value-কে True ধরা হয় এবং শূন্যকে False ধরা হয়। Relational Operator সাধারণত Conditional Statement (if-else) এবং Loop (for, while) তে ব্যবহৃত হয়।
Relational Operator-এর Precedence Arithmetic Operator-এর চেয়ে কম। অর্থাৎ, একটি Expression-এ Arithmetic এবং Relational Operator একসাথে থাকলে আগে Arithmetic Operation সম্পন্ন হবে, তারপর Relational Comparison হবে। যেমন a + b > c Expression-এ প্রথমে a+b যোগ হবে, তারপর ফলাফল c-এর সাথে তুলনা করা হবে।
#include <stdio.h> int main() { int a = 10, b = 5; printf("a == b: %d\n", a == b); // 0 (False) printf("a != b: %d\n", a != b); // 1 (True) printf("a > b: %d\n", a > b); // 1 (True) printf("a < b: %d\n", a < b); // 0 (False) printf("a >= b: %d\n", a >= b); // 1 (True) printf("a <= b: %d\n", a <= b); // 0 (False) // Relational + Arithmetic একসাথে printf("a + b > 12: %d\n", a + b > 12); // 1 (True) কারণ 15 > 12 return 0; }
উপরের Program-এ a + b > 12 Expression-এ দেখা যাচ্ছে যে Arithmetic Operator (+) এর Precedence Relational Operator (>) এর চেয়ে বেশি, তাই প্রথমে a+b = 15 হিসাব হয়েছে, তারপর 15 > 12 তুলনা করে 1 (True) রিটার্ন হয়েছে।
অধ্যায় ৩
Logical Operator
Logical Operator একাধিক Condition-কে একসাথে Combine করে। এগুলো মূলত Decision Making-এর ক্ষেত্রে ব্যবহৃত হয়। C Language-তে ৩টি Logical Operator আছে — && (AND), || (OR) এবং ! (NOT)। এগুলোর সাহায্যে জটিল Condition তৈরি করা যায়। প্রতিটি Operator-এর কাজ এবং ব্যবহার নিচে বিস্তারিত আলোচনা করা হলো।
&& (Logical AND)
দুটি Condition-ই True হলে ফলাফল True হয়। একটিও False হলে False হয়।
(a > 0) && (b > 0)
True && True = True
True && False = False
False && True = False
False && False = False
|| (Logical OR)
যেকোনো একটি Condition True হলে ফলাফল True হয়। দুটিই False হলে False হয়।
(a > 0) || (b > 0)
True || True = True
True || False = True
False || True = True
False || False = False
! (Logical NOT) Operator একটি Condition-কে উল্টে দেয়। যদি Condition True হয় তবে NOT Operator সেটিকে False করে দেয় এবং যদি False হয় তবে True করে দেয়। যেমন: !(a > b) — যদি a > b True হয়, তবে !(a > b) হবে False। এটি সাধারণত কোনো Condition-কে Negate করতে ব্যবহৃত হয়।
Logical Operator-এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হলো Short-Circuit Evaluation&& Operator-এর ক্ষেত্রে যদি প্রথম Condition False হয় তবে দ্বিতীয় Condition Check করা হয় না, কারণ পুরো Expression নিশ্চিতভাবে False হবে। একইভাবে || Operator-এর ক্ষেত্রে যদি প্রথম Condition True হয় তবে দ্বিতীয় Condition Check করা হয় না, কারণ পুরো Expression নিশ্চিতভাবে True হবে। এটি Program-এর Performance বাড়ায় এবং অনেক সময় Error থেকেও রক্ষা করে।
#include <stdio.h> int main() { int a = 10, b = 5, c = 0; // AND Operator if (a > 0 && b > 0) printf("Both positive\n"); // Print হবে // OR Operator if (a > 0 || c > 0) printf("At least one positive\n"); // Print হবে // NOT Operator if (!(a == b)) printf("a is not equal to b\n"); // Print হবে // Short-Circuit Evaluation উদাহরণ if (c != 0 && a/c > 2) // এখানে a/c Execute হবে না printf("Safe division\n"); return 0; }
উপরের Program-এ Short-Circuit Evaluation-এর উদাহরণ দেখা যাচ্ছে। c != 0 && a/c > 2 Expression-এ যেহেতু c = 0, তাই c != 0 False। AND Operator-এর Short-Circuit বৈশিষ্ট্য অনুযায়ী প্রথম Condition False হলে দ্বিতীয় Condition (a/c > 2) Check করা হয় না। ফলে a/c (যা Division by Zero হতো) Execute হয় না এবং Program Crash হয় না। এটি Logical Operator-এর একটি অত্যন্ত গুরুত্বপূর্ণ ব্যবহার।
AND (&&) Rule
দুটি Condition-ই True হতে হবে। একটি False হলেই পুরো Expression False।
OR (||) Rule
যেকোনো একটি Condition True হলেই পুরো Expression True।
NOT (!) Rule
Condition-কে উল্টে দেয়। True → False, False → True।
অধ্যায় ৪
Assignment Operator এবং Increment/Decrement Operator
Assignment Operator (=) ডানদিকের Value বামদিকের Variable-এ Store করে। C Language-তে শুধু সাধারণ Assignment Operator (=) নয়, বরং Compound Assignment Operator-ও আছে যেগুলো Arithmetic Operation এবং Assignment একসাথে করে। অন্যদিকে Increment (++) এবং Decrement (--) Operator একটি Variable-এর Value ১ বাড়ায় বা কমায়।
Assignment Operator
Compound Assignment Operator কোডকে সংক্ষিপ্ত ও Readable করে। যেমন a = a + 5; এর পরিবর্তে a += 5; লিখলে একই কাজ হয় কিন্তু কোড ছোট হয়। সব Compound Assignment Operator মূল Variable-এর উপর Operation করে ফলাফল একই Variable-এ Store করে।
Increment এবং Decrement Operator
Increment Operator (++) একটি Variable-এর Value 1 বাড়ায় এবং Decrement Operator (--) একটি Variable-এর Value 1 কমায়। এগুলো দুইভাবে ব্যবহার করা যায় — Pre এবং Post। Pre এবং Post-এর পার্থক্য বোঝা অত্যন্ত জরুরি কারণ Expression-এর ফলাফল এদের ব্যবহারের ধরনের উপর নির্ভর করে।
Pre-Increment / Pre-Decrement
++a — আগে Value বাড়ায়, তারপর ব্যবহার করে।
--a — আগে Value কমায়, তারপর ব্যবহার করে।
উদাহরণ: a = 5; b = ++a;
এখানে প্রথমে a=6 হবে, তারপর b=6 হবে।
Post-Increment / Post-Decrement
a++ — আগে Value ব্যবহার করে, তারপর বাড়ায়।
a-- — আগে Value ব্যবহার করে, তারপর কমায়।
উদাহরণ: a = 5; b = a++;
এখানে প্রথমে b=5 হবে, তারপর a=6 হবে।
#include <stdio.h> int main() { int a = 5, b = 5; int x = ++a; // Pre: a=6, x=6 int y = b++; // Post: y=5, b=6 printf("x = %d, a = %d\n", x, a); // x=6, a=6 printf("y = %d, b = %d\n", y, b); // y=5, b=6 // Compound Assignment int c = 10; c += 5; // c = 15 c -= 3; // c = 12 c *= 2; // c = 24 c /= 4; // c = 6 c %= 4; // c = 2 printf("Final c = %d\n", c); return 0; }
উপরের Program-এ Pre এবং Post Increment-এর পার্থক্য স্পষ্টভাবে দেখা যাচ্ছে। x = ++a এর ক্ষেত্রে প্রথমে a-এর Value ১ বেড়ে 6 হয়েছে, তারপর সেই Value x-এ Assign হয়েছে। কিন্তু y = b++ এর ক্ষেত্রে প্রথমে b-এর মূল Value 5 y-এ Assign হয়েছে, তারপর b-এর Value ১ বেড়ে 6 হয়েছে। এই পার্থক্যটি Loop এবং Array Manipulation-এ বিশেষভাবে গুরুত্বপূর্ণ।
অধ্যায় ৫
Conditional (Ternary) Operator
Conditional Operator হল C Language-এর একমাত্র Ternary Operator — অর্থাৎ এটি তিনটি Operand নিয়ে কাজ করে। এর Symbol হলো ? : । এটি if-else Statement-এর একটি সংক্ষিপ্ত রূপ। খুব ছোট Conditional Check-এর ক্ষেত্রে এটি ব্যবহার করা সুবিধাজনক। Conditional Operator-এর Syntax হলো:
condition ? expression1 : expression2;
যদি Condition True হয় তবে expression1 Execute হবে, আর False হলে expression2 Execute হবে। এটি মূলত Value Assign করার ক্ষেত্রে ব্যবহৃত হয়। নিচে বিস্তারিত উদাহরণ দেওয়া হলো:
#include <stdio.h> int main() { int a = 10, b = 5; int max; // Conditional Operator ব্যবহার max = (a > b) ? a : b; printf("Maximum = %d\n", max); // Maximum = 10 // সরাসরি printf-এ ব্যবহার printf("%d is %s\n", a, (a > 0) ? "positive" : "negative"); // Nested Conditional Operator int x = 0; char sign = (x > 0) ? 'P' : (x < 0) ? 'N' : 'Z'; printf("Sign: %c\n", sign); // Sign: Z // Odd or Even check int num = 7; printf("%d is %s\n", num, (num % 2 == 0) ? "Even" : "Odd"); return 0; }
উপরের Program-এ বিভিন্নভাবে Conditional Operator ব্যবহার দেখানো হয়েছে। প্রথম উদাহরণে max = (a > b) ? a : b; — এখানে যদি a > b True হয় তবে max-এ a-এর Value Assign হবে, নাহলে b-এর Value Assign হবে। দ্বিতীয় উদাহরণে সরাসরি printf-এর মধ্যে Conditional Operator ব্যবহার করা হয়েছে। তৃতীয় উদাহরণে Nested Conditional Operator দেখানো হয়েছে — একাধিক Condition Check করার জন্য একটি Conditional Operator-এর ভেতরে আরেকটি Conditional Operator ব্যবহার করা যায়।
if-else বনাম Conditional Operator
if-else Version:
if (a > b) max = a; else max = b;
Conditional Operator Version:
max = (a > b) ? a : b;
কখন ব্যবহার করবেন?
Conditional Operator তখনই ব্যবহার করুন যখন Condition এবং Action দুটোই খুব Simple হয়। জটিল Logic-এর ক্ষেত্রে if-else ব্যবহার করাই ভালো, কারণ সেটা বেশি Readable।
Nested Conditional Operator অতিরিক্ত ব্যবহার করলে Code পড়া কঠিন হয়ে যায়, তাই সতর্কতার সাথে ব্যবহার করুন।
Conditional Operator-এর Precedence অনেকগুলো Operator-এর চেয়ে কম, কিন্তু Assignment Operator (=) এর চেয়ে বেশি। তাই Expression লেখার সময় প্রয়োজনে Parenthesis () ব্যবহার করা উচিত যাতে সঠিক Order-এ Operation সম্পন্ন হয়।
সুবিধা
কোড সংক্ষিপ্ত হয়, এক লাইনে if-else কাজ করা যায়। Simple Condition-এর জন্য আদর্শ।
⚠️ সতর্কতা
জটিল বা Nested Conditional Operator Code পড়া কঠিন করে তোলে। Readability বজায় রাখুন।
📌 ব্যবহার
Maximum/Minimum বের করা, Odd/Even Check, Sign Check — এসব Simple কাজে খুব কার্যকর।
অধ্যায় ৬
Comma Operator এবং Operator Precedence
Comma Operator (,) C Language-এর সবচেয়ে কম Precedence-ওয়ালা Operator। এটি একাধিক Expression-কে একটি Statement-এ Combine করে। Comma Operator বাম থেকে ডানে Evaluate হয় এবং সর্বশেষ Expression-এর Value রিটার্ন করে। এটি সাধারণত for Loop-এ একাধিক Variable Initialize বা Update করার ক্ষেত্রে ব্যবহৃত হয়।
#include <stdio.h> int main() { // Comma Operator ব্যবহার int a, b; a = (b = 5, b + 3, b * 2); // a = 10 printf("a = %d, b = %d\n", a, b); // for Loop-এ Comma Operator for (int i = 0, j = 10; i < j; i++, j--) printf("%d %d\n", i, j); return 0; }
উপরের Program-এ a = (b = 5, b + 3, b * 2); Expression-এ Comma Operator বাম থেকে ডানে Evaluate হয়েছে। প্রথমে b = 5 হয়েছে, তারপর b + 3 (যা 8) Evaluate হয়েছে কিন্তু Value ব্যবহার করা হয়নি, শেষে b * 2 (যা 10) Evaluate হয়েছে এবং সেই Value a-এ Assign হয়েছে। for Loop-এও Comma Operator ব্যবহার করা হয়েছে একাধিক Variable Initialize এবং Update করার জন্য।
Operator Precedence এবং Associativity
একাধিক Operator একটি Expression-এ থাকলে কোন Operator আগে Evaluate হবে তা নির্ধারণ করে Precedence। আর একই Precedence-এর Operator থাকলে কোন দিক থেকে Evaluate হবে তা নির্ধারণ করে Associativity। C Language-এর Operator Precedence Table নিচে দেওয়া হলো (উচ্চ থেকে নিম্ন Precedence অনুযায়ী):
Precedence Table থেকে বোঝা যায় যে Parenthesis ()-এর Precedence সর্বোচ্চ, তাই যেকোনো Expression-এ () ব্যবহার করে Evaluate-এর Order পরিবর্তন করা যায়। Comma Operator-এর Precedence সর্বনিম্ন। Associativity নির্ধারণ করে যে একই Precedence-এর Operator কোন দিক থেকে Evaluate হবে — বেশিরভাগ Operator বাম থেকে ডান (Left to Right) Associate করে, কিন্তু Unary, Assignment এবং Conditional Operator ডান থেকে বাম (Right to Left) Associate করে।
#include <stdio.h> int main() { int a = 5, b = 3, c = 2; // Precedence উদাহরণ int x = a + b * c; // 5 + (3*2) = 11 (* আগে) int y = (a + b) * c; // (5+3) * 2 = 16 () আগে int z = a == b + c; // 5 == (3+2) → 5 == 51 (+ আগে) printf("x = %d\n", x); // 11 printf("y = %d\n", y); // 16 printf("z = %d\n", z); // 1 // Associativity উদাহরণ int p = 10, q = 5, r = 2; int m = p - q - r; // (10-5)-2 = 3 (Left to Right) int n = p = q = r; // p=(q=(r=2)) → সব = 2 (Right to Left) printf("m = %d\n", m); // 3 printf("n = %d, p = %d, q = %d\n", n, p, q); // 2, 2, 2 return 0; }
উপরের Program-এ Precedence এবং Associativity-এর ব্যবহারিক উদাহরণ দেখা যাচ্ছে। a + b * c Expression-এ * Operator-এর Precedence + এর চেয়ে বেশি, তাই প্রথমে b*c হয়েছে। কিন্তু (a+b)*c Expression-এ Parenthesis ব্যবহার করার ফলে প্রথমে a+b হয়েছে। Associativity-এর উদাহরণে p - q - r Left to Right Associate করে অর্থাৎ (p-q)-r, আর p = q = r Right to Left Associate করে অর্থাৎ p = (q = r)

💡 টিপস: Precedence Confusion এড়াতে সবসময় Parenthesis () ব্যবহার করুন। এতে Code পড়া সহজ হয় এবং ভুল হওয়ার সম্ভাবনা কমে।
অধ্যায় ৭
Arithmetic Expression Evaluation এবং Type Conversion
C Programming-এ একটি Arithmetic Expression Evaluate করার সময় Operator-এর Precedence এবং Associativity অনুসরণ করা হয়। Expression-এ বিভিন্ন Data Type-এর Variable থাকলে Type Conversion ঘটে। Type Conversion দুই প্রকার — Implicit (Automatic) এবং Explicit (Type Casting)
Implicit Type Conversion
Compiler নিজে থেকেই ছোট Data Type-কে বড় Data Type-তে Convert করে দেয়। একে Promotion বলে। যেমন int এবং float একসাথে থাকলে int-কে float-এ Convert করা হয়। নিচে Data Type-এর Hierarchy দেওয়া হলো (ছোট থেকে বড়):
char / short
সবচেয়ে ছোট Data Type। Automatically int-এ Promote হয়।
int
float বা double-এর সাথে থাকলে Promote হয়।
float
double-এর সাথে থাকলে double-এ Promote হয়।
double / long double
সবচেয়ে বড় Data Type। অন্য সব এখানে Promote হয়।
Implicit Conversion-এর সময় ছোট Data Type থেকে বড় Data Type-তে যাওয়া নিরাপদ, কারণ কোনো Data Loss হয় না। কিন্তু বড় Data Type থেকে ছোট Data Type-তে Implicit Conversion হলে Data Loss হতে পারে, তাই Compiler Warning দিতে পারে।
Explicit Type Conversion (Type Casting)
Programmer নিজেই জোর করে একটি Data Type-কে অন্য Data Type-তে Convert করতে পারেন। একে Type Casting বলে। Syntax: (data_type) expression;
#include <stdio.h> int main() { // Implicit Type Conversion int a = 10; float b = 3.5; float result1 = a + b; // a automatically float-এ convert printf("Implicit: %.2f\n", result1); // 13.50 // Integer Division সমস্যা int x = 10, y = 3; float div1 = x / y; // 3.00 (ভুল! আগে int division, পরে float) float div2 = (float)x / y; // 3.33 (সঠিক! Type Casting) printf("Without cast: %.2f\n", div1); printf("With cast: %.2f\n", div2); // Explicit Type Casting double d = 9.87; int i = (int)d; // d কে int-এ convert printf("Casted: %d\n", i); // 9 (দশমিক অংশ বাদ) char c = 'A'; int ascii = (int)c; // char to int printf("ASCII of %c = %d\n", c, ascii); // 65 return 0; }
উপরের Program-এ Implicit এবং Explicit Type Conversion-এর উদাহরণ দেখা যাচ্ছে। float div1 = x / y; Expression-এ প্রথমে Integer Division হয়েছে (10/3 = 3), তারপর সেই Integer Value Float-এ Convert হয়েছে, তাই ফলাফল 3.00। কিন্তু float div2 = (float)x / y; Expression-এ Type Casting-এর ফলে প্রথমে x Float-এ Convert হয়েছে, তারপর Float Division হয়েছে, তাই সঠিক ফলাফল 3.33 পাওয়া গেছে। এটি Type Casting-এর একটি অত্যন্ত গুরুত্বপূর্ণ ব্যবহার।
Implicit Conversion
Compiler নিজেই করে। ছোট → বড় Data Type। কোনো Data Loss হয় না।
উদাহরণ: int + float → float
Explicit Conversion
Programmer নিজে করে। যেকোনো Direction-এ Convert করা যায়। Data Loss হতে পারে।
উদাহরণ: (float)a / b
Type Conversion বোঝা C Programming-এ অত্যন্ত জরুরি কারণ ভুল Type Conversion-এর ফলে Unexpected Result আসতে পারে। বিশেষ করে Integer Division-এর ক্ষেত্রে সতর্ক থাকতে হবে — যদি সঠিক ভাগফল (ভগ্নাংশসহ) চান তবে অন্তত একটি Operand-কে Float বা Double-এ Cast করতে হবে।
অধ্যায় ৮
Character I/O এবং Escape Sequence
C Programming-এ User-এর কাছ থেকে Input নেওয়া এবং Screen-এ Output দেখানোর জন্য বিভিন্ন Function আছে। Character I/O মানে একটি করে Character পড়া বা লেখা। এজন্য getchar() এবং putchar() Function ব্যবহৃত হয়। এছাড়া পুরো String বা বিভিন্ন Format-এ Input/Output-এর জন্য scanf() এবং printf() ব্যবহৃত হয়।
getchar() এবং putchar()
getchar() Function Keyboard থেকে একটি Character পড়ে এবং তার Integer Value রিটার্ন করে। putchar() Function একটি Character Screen-এ Print করে। এগুলো <stdio.h> Header File-এ Define করা আছে।
#include <stdio.h> int main() { char ch; printf("Enter a character: "); ch = getchar(); // একটি character পড়া printf("You entered: "); putchar(ch); // একটি character লেখা putchar('\n'); // Newline // getchar() রিটার্ন Value দেখা int val = getchar(); printf("ASCII Value: %d\n", val); return 0; }
Escape Sequence
Escape Sequence হল বিশেষ Character Combination যা Backslash (\) দিয়ে শুরু হয়। এগুলো Print করার সময় বিশেষ কাজ করে — যেমন New Line, Tab, Backspace ইত্যাদি। Escape Sequence সাধারণত String-এর ভেতরে ব্যবহৃত হয়। নিচে সবচেয়ে বেশি ব্যবহৃত Escape Sequence গুলো দেওয়া হলো:
Escape Sequence মূলত ASCII Character Print করার জন্য ব্যবহৃত হয় যেগুলো সরাসরি Keyboard থেকে টাইপ করা যায় না (যেমন Newline, Tab) অথবা ASCII Character Print করার জন্য যেগুলো Special Meaning বহন করে (যেমন Double Quote, Backslash)।
#include <stdio.h> int main() { printf("Hello\nWorld\n"); // \n ব্যবহার printf("Name:\tRahul\n"); // \t ব্যবহার printf("Path: C:\\folder\n"); // \\ ব্যবহার printf("He said \"Hi\"\n"); // \" ব্যবহার printf("It\'s okay\n"); // \' ব্যবহার printf("Line1\rLine2\n"); // \r ব্যবহার printf("Back\bspace\n"); // \b ব্যবহার printf("\a"); // \a - Beep Sound return 0; }
উপরের Program-এ বিভিন্ন Escape Sequence-এর ব্যবহার দেখানো হয়েছে। \n নতুন লাইনে নিয়ে যায়, \t Tab Space দেয়, \\ Backslash Print করে, \" Double Quote Print করে, \' Single Quote Print করে, \r লাইনের শুরুতে ফিরিয়ে আনে, \b একটি Character পেছনে সরায় এবং \a Beep Sound তৈরি করে।
\n (Newline)
সবচেয়ে বেশি ব্যবহৃত Escape Sequence। পরের লাইনে চলে যায়।
\t (Tab)
Horizontal Tab Space দেয়। Column Format-এ Print করতে সাহায্য করে।
\\ (Backslash)
Backslash Character Print করতে ব্যবহৃত হয়। File Path দেখাতে কাজে লাগে।
\" (Double Quote)
Double Quote Print করতে ব্যবহৃত হয়। String-এর ভেতরে Quote দেখাতে লাগে।
অধ্যায় ৯
Formatted I/O — printf() এবং scanf()
Formatted I/O মানে নির্দিষ্ট Format-এ Input নেওয়া এবং Output দেখানো। C Language-তে এর জন্য মূল দুটি Function হলো — printf() (Output-এর জন্য) এবং scanf() (Input-এর জন্য)। এগুলো <stdio.h> Header File-এ Define করা আছে। Format Specifier ব্যবহার করে বিভিন্ন Data Type-এর Variable Handle করা যায়।
Format Specifier
Format Specifier হল একটি Special Code যা printf() এবং scanf()-তে ব্যবহৃত হয় Variable-এর Data Type অনুযায়ী সঠিক Format-এ Input/Output করার জন্য। প্রতিটি Data Type-এর জন্য আলাদা Format Specifier আছে — %d int-এর জন্য, %f float-এর জন্য, %c char-এর জন্য, %s String-এর জন্য ইত্যাদি।
#include <stdio.h> int main() { // printf() ব্যবহার int age = 20; float salary = 25000.50; char grade = 'A'; char name[] = "Rahul"; printf("Name: %s\n", name); printf("Age: %d years\n", age); printf("Salary: Rs. %.2f\n", salary); // 2 decimal places printf("Grade: %c\n", grade); // Width এবং Precision printf("%10d\n", age); // 10 character width printf("%05d\n", age); // 0 দিয়ে পূরণ printf("%8.2f\n", salary); // width=8, 2 decimal // scanf() ব্যবহার int num; float price; printf("Enter number and price: "); scanf("%d %f", &num, &price); // & (Address) জরুরি printf("You entered: %d and %.2f\n", num, price); // Character Input char ch; printf("Enter a character: "); scanf(" %c", &ch); // Space before %c (newline skip) printf("Character: %c\n", ch); return 0; }
উপরের Program-এ printf() এবং scanf()-এর বিভিন্ন ব্যবহার দেখানো হয়েছে। %.2f ব্যবহার করে Float Value-এর পরে কতটি Decimal Place দেখানো হবে তা নিয়ন্ত্রণ করা যায়। %10d ব্যবহার করে Minimum Field Width নির্ধারণ করা যায়। %05d ব্যবহার করলে সংখ্যাটি ৫ Digit-এর হবে এবং প্রয়োজনে বামদিকে ০ দিয়ে পূরণ হবে। scanf()-তে Variable-এর Address (&) ব্যবহার করা জরুরি — যেমন &num, &price। Character Input-এর ক্ষেত্রে scanf(" %c", &ch) লিখতে হয় (Space before %c) কারণ আগের Input-এর Newline Character Skip করা যায়।
printf() - Output
Screen-এ Data Print করে। Format Specifier দিয়ে Format ঠিক করা যায়।
উদাহরণ: printf("Age: %d", age);
Decimal Place: %.2f
Width: %10d
scanf() - Input
Keyboard থেকে Input নেয়। Variable-এর Address (&) দিতে হয়।
উদাহরণ: scanf("%d", &age);
Multiple: scanf("%d %f", &a, &b);
Char: scanf(" %c", &ch);
Formatted I/O C Programming-এর অত্যন্ত গুরুত্বপূর্ণ অংশ। printf() এবং scanf() সঠিকভাবে ব্যবহার করতে পারলে User-এর সাথে Interaction সহজ হয়ে যায়। Format Specifier সঠিকভাবে ব্যবহার করা জরুরি — ভুল Specifier ব্যবহার করলে Wrong Output বা Program Crash হতে পারে।
9+
Format Specifier
%d, %f, %c, %s, %x, %o, %u, %ld, %lf — বিভিন্ন Data Type-এর জন্য
2
মূল Function
printf() Output-এর জন্য এবং scanf() Input-এর জন্য
10+
Escape Sequence
\n, \t, \b, \r, \\, \", \', \0, \a, \? — বিশেষ Character-এর জন্য
C Programming-এ Operator, Type Conversion, Character I/O, Escape Sequence এবং Formatted I/O — এই সব Topic মিলিয়ে একটি শক্তিশালী ভিত্তি তৈরি হয়। এই বিষয়গুলো ভালোভাবে আয়ত্ত করলে Advanced C Programming শেখা অনেক সহজ হয়ে যায়।
Made with