Input Output
ইনপুট আউটপুট
ইনপুট আউটপুট (Input/Output)
১. ভূমিকা — দোকানে টাকা দাও, পণ্য পাও
তুমি একটি দোকানে গেলে:
- তুমি টাকা দাও → Input
- দোকানদার পণ্য দেয় → Output
কম্পিউটারও একইভাবে কাজ করে:
- তুমি কিছু দাও (কীবোর্ডে টাইপ) → Input
- কম্পিউটার ফলাফল দেখায় → Output
C প্রোগ্রামে এই কাজ করে scanf() এবং printf()।
২. সমস্যা — Fixed মান দিয়ে প্রোগ্রাম কি সবার কাজে লাগে?
প্রোগ্রাম যদি শুধু fixed মান দিয়ে কাজ করে:
int age = 17; // সবসময় 17
তাহলে তা শুধু একজনের জন্য কাজ করে।
কিন্তু যদি ব্যবহারকারী নিজে মান দিতে পারে — তাহলে প্রোগ্রাম সবার জন্য কাজ করে।
এই সমস্যার সমাধান হলো Input/Output (I/O)।
৩. চিত্রের মাধ্যমে বোঝো
ব্যবহারকারী কম্পিউটার
│ │
│── কীবোর্ডে টাইপ ─────────►│ scanf() → Variable-এ রাখো
│ │
│◄──── স্ক্রিনে দেখাও ───── │ printf() ← Variable থেকে নাও
│ │
Standard I/O:
stdin (keyboard) → scanf
stdout (monitor) → printf
stderr (monitor) → error messages
৪. বাস্তব জীবনের সাথে মিল
টেলিফোন বুথ ভাবো:
printf()= মাইক্রোফোন (তুমি কথা বলো, অন্যরা শোনে)scanf()= কান/রিসিভার (অন্যরা কথা বলে, তুমি শোনো)%d,%f,%c= কোন ভাষায় কথা বলতে হবে তার নির্দেশনা
Module 1: সংজ্ঞা ও ধারণা
printf() — আউটপুট ফাংশন
printf("format string", variable1, variable2, ...);
scanf() — ইনপুট ফাংশন
scanf("format string", &variable1, &variable2, ...);
Format Specifiers:
| Specifier | Data Type | উদাহরণ |
|---|---|---|
%d | int | printf("%d", 17) → 17 |
%f | float | printf("%f", 3.14) → 3.140000 |
%.2f | float (2 দশমিক) | printf("%.2f", 3.14) → 3.14 |
%lf | double | scanf("%lf", &d) |
%c | char | printf("%c", 'A') → A |
%s | string | printf("%s", "Hello") → Hello |
Escape Sequences:
| Sequence | অর্থ |
|---|---|
\n | নতুন লাইন |
\t | Tab (৪/৮ স্পেস) |
\\ | Backslash প্রিন্ট |
\" | Double quote প্রিন্ট |
%% | % চিহ্ন প্রিন্ট |
Module 2: কীভাবে কাজ করে
printf("নম্বর: %d\n", 95);
ধাপ ১: "নম্বর: " → সরাসরি প্রিন্ট
ধাপ ২: %d → 95 কে দশমিক সংখ্যা হিসেবে প্রিন্ট
ধাপ ৩: \n → cursor নতুন লাইনে যায়
স্ক্রিনে:
নম্বর: 95
(নতুন লাইনে cursor)
scanf("%d", &age);
ধাপ ১: কীবোর্ড থেকে ইনপুট অপেক্ষা করো
ধাপ ২: "17" টাইপ করে Enter চাপলে
ধাপ ৩: "17" কে int-এ রূপান্তর করো
ধাপ ৪: age-এর Memory Address-এ (& চিহ্ন) রাখো
Module 3: প্যাটার্ন ও উদাহরণ
প্যাটার্ন ১: printf — বিভিন্ন Format
উদাহরণ ১.১: একাধিক Variable প্রিন্ট
#include <stdio.h>
int main() {
int age = 17;
float gpa = 4.75;
char grade = 'A';
printf("বয়স: %d বছর\n", age);
printf("GPA: %.2f\n", gpa);
printf("গ্রেড: %c\n", grade);
return 0;
}
আউটপুট:
বয়স: 17 বছর
GPA: 4.75
গ্রেড: A
উদাহরণ ১.২: একই লাইনে একাধিক মান
#include <stdio.h>
int main() {
int a = 5, b = 3;
printf("%d + %d = %d\n", a, b, a + b);
printf("%d - %d = %d\n", a, b, a - b);
printf("%d × %d = %d\n", a, b, a * b);
return 0;
}
আউটপুট:
5 + 3 = 8
5 - 3 = 2
5 × 3 = 15
উদাহরণ ১.৩: সুন্দর টেবিল প্রিন্ট
#include <stdio.h>
int main() {
printf("%-15s %5s %6s\n", "নাম", "রোল", "নম্বর");
printf("%-15s %5d %6.1f\n", "রাহিম", 1, 87.5);
printf("%-15s %5d %6.1f\n", "করিম", 2, 92.0);
printf("%-15s %5d %6.1f\n", "জামিলা", 3, 78.5);
return 0;
}
আউটপুট:
নাম রোল নম্বর
রাহিম 1 87.5
করিম 2 92.0
জামিলা 3 78.5
প্যাটার্ন ২: scanf — বিভিন্ন Input
উদাহরণ ২.১: একটি integer ইনপুট
#include <stdio.h>
int main() {
int n;
printf("একটি সংখ্যা দাও: ");
scanf("%d", &n);
printf("তুমি দিয়েছো: %d\n", n);
printf("তার বর্গ: %d\n", n * n);
return 0;
}
উদাহরণ ২.২: একাধিক Variable ইনপুট
#include <stdio.h>
int main() {
int age;
float height;
char gender;
printf("বয়স: ");
scanf("%d", &age);
printf("উচ্চতা (ফুট): ");
scanf("%f", &height);
printf("লিঙ্গ (M/F): ");
scanf(" %c", &gender); // space দিলে whitespace skip হয়
printf("\n--- তথ্য ---\n");
printf("বয়স: %d বছর\n", age);
printf("উচ্চতা: %.1f ফুট\n", height);
printf("লিঙ্গ: %c\n", gender);
return 0;
}
উদাহরণ ২.৩: একসাথে দুটি সংখ্যা ইনপুট
#include <stdio.h>
int main() {
int a, b;
printf("দুটি সংখ্যা দাও (space দিয়ে আলাদা করো): ");
scanf("%d %d", &a, &b);
printf("যোগফল: %d\n", a + b);
printf("গুণফল: %d\n", a * b);
return 0;
}
প্যাটার্ন ৩: Formatted Output
উদাহরণ ৩.১: Width Formatting
#include <stdio.h>
int main() {
// %5d → ন্যূনতম 5 অক্ষর প্রশস্ততা (ডান-সারি)
printf("[%5d]\n", 42); // [ 42]
printf("[%-5d]\n", 42); // [42 ] (বাম-সারি)
printf("[%05d]\n", 42); // [00042] (শূন্য দিয়ে পূর্ণ)
return 0;
}
আউটপুট:
[ 42]
[42 ]
[00042]
উদাহরণ ৩.২: Float Precision
#include <stdio.h>
int main() {
float pi = 3.14159265;
printf("%.0f\n", pi); // 3
printf("%.1f\n", pi); // 3.1
printf("%.2f\n", pi); // 3.14
printf("%.4f\n", pi); // 3.1416
printf("%.6f\n", pi); // 3.141593
return 0;
}
আউটপুট:
3
3.1
3.14
3.1416
3.141593
উদাহরণ ৩.৩: Escape Sequences ব্যবহার
#include <stdio.h>
int main() {
printf("লাইন ১\nলাইন ২\nলাইন ৩\n");
printf("কলাম১\tকলাম২\tকলাম৩\n");
printf("সে বলল: \"হ্যালো!\"\n");
printf("পথ: C:\\Users\\rahim\\\n");
printf("ছাড়: ১০%%\n");
return 0;
}
আউটপুট:
লাইন ১
লাইন ২
লাইন ৩
কলাম১ কলাম২ কলাম৩
সে বলল: "হ্যালো!"
পথ: C:\Users\rahim\
ছাড়: ১০%
প্যাটার্ন ৪: String Input/Output
উদাহরণ ৪.১: একটি শব্দ ইনপুট
#include <stdio.h>
int main() {
char name[50];
printf("তোমার নাম: ");
scanf("%s", name); // & লাগে না array-এ
printf("হ্যালো, %s!\n", name);
return 0;
}
উদাহরণ ৪.২: পুরো বাক্য ইনপুট (space সহ)
#include <stdio.h>
int main() {
char sentence[100];
printf("একটি বাক্য লেখো: ");
fgets(sentence, sizeof(sentence), stdin);
printf("তুমি লিখেছো: %s", sentence);
return 0;
}
Module 4: বাস্তব প্রয়োগ
| পরিস্থিতি | I/O ব্যবহার |
|---|---|
| ক্যালকুলেটর | scanf: সংখ্যা নাও, printf: ফলাফল দেখাও |
| পরীক্ষার ফলাফল | scanf: নম্বর নাও, printf: গ্রেড দেখাও |
| ATM | scanf: PIN নাও, printf: ব্যালেন্স দেখাও |
| ফর্ম পূরণ | scanf: তথ্য নাও, printf: নিশ্চিতকরণ দেখাও |
| গেম স্কোর | scanf: নাম নাও, printf: স্কোর দেখাও |
Module 5: সাধারণ ভুল ও সতর্কতা
ভুল ১: scanf-এ & ভুলে যাওয়া
❌ ভুল:
int age;
scanf("%d", age); // Crash! & ছাড়া
✅ সঠিক:
scanf("%d", &age); // & দিয়ে address পাস
ভুল ২: ভুল Format Specifier
❌ ভুল:
float gpa = 4.5;
printf("%d", gpa); // garbage output!
✅ সঠিক:
printf("%f", gpa); // 4.500000
printf("%.2f", gpa); // 4.50
ভুল ৩: char ইনপুটে whitespace সমস্যা
❌ সমস্যা:
int age;
char grade;
scanf("%d", &age);
scanf("%c", &grade); // Enter key '\n' ধরে নেয়!
✅ সমাধান:
scanf("%d", &age);
scanf(" %c", &grade); // space দিয়ে whitespace skip করো
ভুল ৪: % প্রিন্টে %% ভুলে যাওয়া
❌ ভুল:
printf("ছাড়: 10%"); // Warning বা ভুল output
✅ সঠিক:
printf("ছাড়: 10%%"); // ছাড়: 10%
ভুল ৫: String-এ & দেওয়া
❌ ভুল:
char name[50];
scanf("%s", &name); // Warning!
✅ সঠিক:
scanf("%s", name); // Array name নিজেই pointer
Module 6: সুবিধা-অসুবিধা
| Function | সুবিধা | সীমাবদ্ধতা |
|---|---|---|
printf | নমনীয় formatting | দীর্ঘ format string জটিল |
scanf | সরাসরি variable-এ | whitespace সমস্যা |
gets (পুরনো) | সহজ | Buffer overflow ঝুঁকি (বাদ) |
fgets | নিরাপদ | একটু জটিল |
🔁 নিজে পরীক্ষা করো
MCQ:
১. printf ফাংশনে %f কোন ডেটা টাইপের জন্য?
- ক) int
- খ) float ✓
- গ) char
- ঘ) double
২. scanf("%d", age); — এতে কী সমস্যা?
- ক) %d ভুল
- খ) & নেই ✓
- গ) age নেই
- ঘ) কোনো সমস্যা নেই
৩. \n কী কাজ করে?
- ক) Tab দেয়
- খ) নতুন লাইনে যায় ✓
- গ) NULL দেয়
- ঘ) Backslash প্রিন্ট করে
৪. printf("%.2f", 3.14159) কী প্রিন্ট করবে?
- ক) 3.14159
- খ) 3.14 ✓
- গ) 3.1
- ঘ) 3
৫. char ইনপুটের আগে scanf-এ space কেন দিতে হয়?
- ক) বাধ্যতামূলক
- খ) আগের Enter/whitespace এড়াতে ✓
- গ) Format error
- ঘ) কোনো কারণ নেই
সংক্ষিপ্ত প্রশ্ন:
৬. printf এবং scanf-এর মধ্যে পার্থক্য উদাহরণসহ ব্যাখ্যা করো।
৭. Format Specifiers %d, %f, %c, %s প্রতিটি কোন Data Type-এর জন্য?
📝 HSC পরীক্ষার প্রস্তুতি
১. scanf-এ & কেন দিতে হয়? printf-এ কেন লাগে না?
২. %.2f এবং %f-এর মধ্যে পার্থক্য কী? কখন কোনটি ব্যবহার করবে?
৩. যদি তুমি পুরো নাম (প্রথম ও শেষ নাম) ইনপুট নিতে চাও, scanf("%s") কেন কাজ করবে না? সমাধান কী?
🎯 অনুশীলন প্রশ্ন
সহজ: তিনটি সংখ্যা ইনপুট নাও এবং তাদের যোগফল, গুণফল, এবং গড় দেখাও (2 দশমিক পর্যন্ত)।
মাঝারি: শিক্ষার্থীর নাম, রোল, পাঁচ বিষয়ের নম্বর ইনপুট নাও। মোট নম্বর এবং গড় বের করে সুন্দর টেবিলে দেখাও।
কঠিন: একটি ক্যালকুলেটর প্রোগ্রাম: দুটি float সংখ্যা এবং একটি অপারেটর (+,-,*,/) ইনপুট নাও। ফলাফল 4 দশমিক পর্যন্ত দেখাও।
✅ সারাংশ
🎯 মনে রেখো:
printf()= আউটপুট দেখাও (keyboard → screen)scanf()= ইনপুট নাও (variable-এ রাখো)- Format Specifiers:
%d(int),%f(float),%c(char),%s(string) - Escape:
\n(নতুন লাইন),\t(tab),%%(% প্রিন্ট) scanf-এ variable-এর আগে&দিতে হবে (array ছাড়া)charইনপুটের আগে space দাও:scanf(" %c", &ch)- Float precision:
%.2f= 2 দশমিক পর্যন্ত
💡 পরীক্ষার টিপস: scanf-এ
&এবং char-এ space — এই দুটি সবচেয়ে বেশি ভুল হয়। Format Specifier-এর সাথে Data Type মেলানো জরুরি।