সি ইনপুট আউটপুট

আমরা পূর্বের পর্বে জেনেছি সি প্রোগ্রামিং এর কিওয়ার্ড, আইডেন্টিফায়ার, কন্সট্যান্স সহ আরো অনেক কিছু। এই পর্বে আমরা সি প্রোগ্রামিং এর ইনপুট/আউটপুট অর্থাৎ scanf & printf, getchar & putchar নিয়ে বিস্তারিত আলোচনা করব।

সি প্রোগ্রামিং এ ইনপুট-আউটপুট খুবই গুরুত্বপূর্ণ বিষয়। এর আগের পর্বগুলোতে আমরা scanf & printf এইগুলা নিয়ে কাজ করেছি। আর scanf & printf দিয়ে ইনপুট-আউটপুটের কাজ করা হয়। printf দিয়ে আউটপুট দেখানো হয়। printf ছাড়াও সি প্রোগ্রামিং এ putchar, puts ইত্যাদি ব্যবহার করা হয় আউটপুটের জন্য। একইভাবে ইউজার থেকে কোন ডেটা ইনপুট নিতে চাইলে আমরা scanf, getchar, gets ইত্যাদি ব্যবহার করি। এছাড়াও ফাইল থেকে সরাসরি ইনপুট আউটপুটের কাজ করা যায়। এই পর্বে ধারাবাহিকভাবে কিভাবে এই গুলো ব্যবহার করা হয় তা দেখবো-

putchar()

putchar() ফাংশন অনেকটা printf ফাংশনের মত। আমাদের প্রোগ্রামের আউটপুটে single character দেখানোর জন্য মূলত putchar ফাংশন ব্যবহার করা হয়। putchar() ফাংশন হচ্ছে স্টান্ডার্ড সি এর I/O library এর একটি অংশ।

putchar() ফাংশন মূলত এইভাবে লিখা হয়-

putchar(character variable);

আর প্রোগ্রামের মঝে এটি এইভাবে লিখতে হয়-

char ch;
putchar(ch);

এখানে char ch দ্বারা ক্যারেক্টার টাইপ ভেরিয়েবল বুঝানো হয়েছে যার ch হচ্ছে এর ভেরিয়েবল। আর putchar(ch) দ্বারা আউটপুটে ch এর মান দেখানোর জন্য ব্যবহার করা হয়েছে অর্থাৎ এটি আমাদের আগের প্রোগ্রামগুলির printf ফাংশনের ন্যায় কাজ করবে। বিষয়টি সহজেই বুঝার জন্য নিচের উদাহরণটি লক্ষ্য করুন-

#include <stdio.h>
int main()
{
char ch = 'M';
putchar(ch);
return 0;
}

উপরের প্রোগ্রামটি রান করার পর putchar ফাংশনে অর্থাৎ আউটপুটে M দেখাবে।

getchar()

আমাদের প্রোগ্রামে আমরা যদি আমাদের মত করে ইনপুট সেট করে দিতে চাই, তখন আমরা getchar() অথবা scanf() ফাংশন ব্যবহার করবো। অর্থাৎ getchar ফাংশন আর scanf অনেকটা একই জিনিস। আমাদের প্রোগ্রামে ইনপুটে single character নেওয়ার জন্য মূলত getchar ফাংশন ব্যবহার করা হয়। getchar() ফাংশন হচ্ছে স্টান্ডার্ড সি এর I/O library এর একটি অংশ। getchar() ফাংশন মূলত এইভাবে লিখা হয়-

character variable = getchar( );

আর প্রোগ্রামের মঝে এটি এইভাবে লিখতে হয়-

char ch = getchar();

এখানে char ch দ্বারা ক্যারেক্টার টাইপ ভেরিয়েবল বুঝানো হয়েছে যার ch হচ্ছে এর ভেরিয়েবল। আর getchar() ফাংশন দ্বারা কিবোর্ড থেকে ইনপুট নেওয়ার জন্য ব্যবহার করা হয়েছে। বিষয়টি সহজেই বুঝার জন্য নিচের উদাহরণটি লক্ষ্য করুন-

#include <stdio.h>
int main()
{
printf("Enter a character: ");
char ch = getchar();
printf("Your entered: %c", ch);
return 0;
}

এই প্রোগ্রামটি রান করার পর কিবোর্ড থেকে আপনি যাই ইনপুট দিবেন, তাই আউটপুটে দেখাবে। তবে এটি শুধু সিঙ্গেল ক্যারেক্টার দেখাবে অর্থাৎ আপনি একটি সংখ্যার বেশি ইনপুট দিতে পারবেন না। আপনি আপনার মত করে চেষ্টা করে দেখতে পারেন।

printf()

printf ফাংশন মূলত আউটপুট দেখানোর কাজে ব্যবহার করা হয়। printf ফাংশনের হেডার ফাইল হচ্ছে stdio.h অর্থাৎ আমাদের প্রত্যেকটি সি প্রোগ্রামিং এর শুরুতে আমরা #include <stdio.h> ব্যবহার করি। মূলত আমরা যাতে আমাদের প্রোগ্রামের আউটপুট নিয়ে কাজ করার এক্সেস পায় অর্থাৎ printf ফাংশন নিয়ে কাজ করতে পারি, সেই জন্যই stdio.h হেডার ফাইল ডিক্লেয়ার করি।

printf ফাংশনের সিনট্যাক্স নিম্নরূপ-

printf("format string",argument_list);

এখানে printf এর মানে হচ্ছে print file আর format string এর মানে হচ্ছে কোন ধরনের ডাটা আউটপুটে দেখাবে তার ফরম্যাট। format string হতে পারে %d (integer), %c (character), %s (string), %f (float) ইত্যাদি। printf ফাংশনটি বুঝার জন্য নিচের কোডটি লক্ষ্য করুন-

#include <stdio.h>
int main()
{
// Displays the string inside quotations
printf("C Programming with Sajib!");
return 0;
}

Output

প্রোগ্রামটি রান করলে ডাবল কোটেশনের ভিতরে থাকা C Programming with Sajib! লিখাটি শুধু প্রিন্ট হবে অর্থাৎ সহজ কথায় printf ফাংশনের ভিতরের ডাবল কোটেশনে যা কিছু থাকবে তাই আউটপুটে প্রিন্ট হবে।

আরেকটি প্রোগ্রাম লক্ষ্য করুন-

#include <stdio.h>
int main()
{
char ch = 'M';
printf("Character is: = %c", ch);
return 0;
}

Output:

এই প্রোগ্রামটি রান করলে আউটপুটে M দেখাবে। এর মানে হচ্ছে আমরা main() ফাংশনে প্রথমে char মানে character type ভেরিয়েবল ch এর মধ্যে ‘M’ ভ্যেলু স্টোর করেছি। তারপর printf ফাংশনের ডাবল কোটেশনের ভিতরে Name = %c লিখেছি। %c হচ্ছে format string বা control string। অর্থাৎ আমাদের আউটপুটে কোন ধরনের ডাটা দেখাবে তা নির্ভর করে এই format string এর উপর। এখানে %c হচ্ছে ক্যারেক্টার টাইপ প্লেসহোল্ডার। এই প্লেসহোল্ডার নিয়ে একটু পর বিস্তারিত বলছি।

scanf()

scanf ফাংশন মূলত কিবোর্ড থেকে ইনপুট নেওয়ার জন্য ব্যবহার করা হয়। এর আগে আমরা getchar দিয়ে একটি মাত্র ক্যারেক্টার আউটপুটে ইনপুট নিয়েছিলাম। কিন্তু প্রশ্ন হচ্ছে এখন যদি আমরা স্ট্রিং, ক্যারেক্টার, ডেসিমাল সংখ্যা, দশমিক সংখ্যা সহ অন্যান্য ডেটা ইনপুট নিতে চাই, তাহলে কিভাবে নিব? কারন getchar দিয়ে শুধু একটি মাত্র ক্যারেক্টার ইনপুট নেওয়া যায়। এই সমস্যা সমাধানের জন্য আমরা scanf ফাংশন ব্যবহার করে থাকি। আমি আগেই বলেছি scanf ফাংশনও কিন্তু stdio.h হেডার ফাইলের অন্তর্ভুক্ত।

scanf ফাংশনের সিনট্যাক্স নিম্নরূপ-

scanf ("format string",argument_list);

এখানে scanf এর মানে হচ্ছে scan file আর format string এর মানে হচ্ছে কোন ধরনের ডাটা আউটপুটে ইনপুট নিবে তার ফরম্যাট। format string হতে পারে %d (integer), %c (character), %s (string), %f (float) ইত্যাদি। আর argument দ্বারা Data কম্পিউটারে কোথায় সংরক্ষন হবে তা বুঝায়।

scanf ফাংশনটি বুঝার জন্য নিচের কোডটি লক্ষ্য করুন-

#include <stdio.h>
int main()
{
int num1, num2;
printf("Enter 1st number: ");
scanf("%d", &num1);
printf("Enter 2nd number: ");
scanf("%d", &num2);
printf("1st Number: %d\n", num1);
printf("2nd Number: %d\n", num2);
return 0;
}

এই কোডটিতে প্রথমে ইন্টিজার ডাটাটাইপ ভেরিয়েবল num1 ও num2 নেওয়া হয়েছে। এরপর printf ফাংশন দিয়ে একটি টেক্সট “Enter 1st number: ” প্রিন্ট করেছি। তারপর scanf ফাংশন দিয়ে num1 ভেরিয়েবল কিবোর্ড থেকে ইনপুট নিয়েছি। একইভাবে দ্বিতীয় স্টেপে কাজ করেছি। এরপর দুটি ইনপুট printf ফাংশন দিয়ে আবার প্রিন্ট করেছি। printf ফাংশন এখানে শুধু ইন্টিজার টাইপ ডেটা প্রিন্ট করবে, আপনি চাইলে যেকোনো টাইপ ডেটা প্রিন্ট করাতে পারেন, শুধু ডেটাটাইপটা চেইঞ্জ করে দিলেই হবে।

ফাইল থেকে ইনপুট এবং আউটপুট