আমরা এর আগে আমরা একটি মাত্র ক্যারেক্টার কম্পিউটারে কিভাবে getchar এর সাহায্যে ইনপুট নেওয়া যায় তা দেখছি। এবার আমরা সিঙ্গেল ক্যারেক্টারের পাশা পাশি অন্যান্য ডেটা, যেমন স্ট্রিং, সংখ্যা, দশমিক সংখ্যা সহ অন্যান্য ডেটা কিভাবে কম্পিউটারে ইনপুট নিব তা দেখবো। ক্যারেক্টার, নাম্বার, স্ট্রিং ইত্যাদি যেকোন মান কম্পিউটারে নেওয়ার জন্য “scanf” ফাংশন ব্যবহার করা হয়। আবার putchar এর মত কোন মান কনসোলে দেখানোর জন্য “printf” ফাংশন ব্যবহার করা যায়। putchar দিয়ে একটি মাত্র ক্যারেক্টার কম্পিউটারে Output দেখানো যেত, কিন্তু “printf” ফাংশন দিয়ে একাদিক ডেটা একসাথে কনসোলে আউটপুট দেখানো যায়।
“scanf” ফাংশন ব্যবহারের নিয়মঃ
scanf(control string, argument1, argument2,……..argumentn);
এখানে control string দ্বারা কোন ধরনের ডেটা ইনপুট নিব তার ফরমেট বুঝায়। যাকে প্লেসহোল্ডারও বলা হয়। আর argument দ্বারা ইনপুট নেওয়ার পর ডেটা গুলো কম্পিউটারে কোথায় ( মেমরি এড্রেস এর কোন জাগায়) সংরক্ষন হবে তা বুঝায়।
যেমন একটি প্রোগ্রামে নিচের মত করে Scanf ব্যবহার করা হয়ঃ
char name; scanf(“%c”,&name);
name নামে একটি variable নিয়েছি আমরা। ইনপুট ডিভাইস থেকে এ ভ্যারিয়েবলের মান কম্পিউটারে নিব। আর তার জন্য ব্যবহার করেছি scanf ফাংশন।
এখানে control string হচ্ছে c। প্রতিটি control string একটি % চিহ্ন দিয়ে শুরু করতে হয়। তাই এখানে control string টি %c দ্বারা লিখা হয়েছে। এখানে c দ্বারা বুঝানো হয় যে Data item একটি single character। এরকম আরো অনেক গুলো control string রয়েছে। একটু পরই আমরা সেগুলো সম্পর্কে জানব।
scanf নিয়ে সম্পুর্ণ একটা প্রোগ্রামঃ
#include <stdio.h> int main(void) { float gpa; printf("Enter your SSC GPA:" ); scanf("%f",&gpa); printf("You SSC GPA: %f \n",gpa); return 0; }
“printf” ফাংশন ব্যবহারের নিয়মঃ
printf(control string, argument1, argument2,……..argumentn);
এখানে control string দ্বারা কোন ধরনের Data Output দিবে তার ফরমেট বুঝায়। আর argument দ্বারা প্রতিটি আউটপুট ডেটা প্রকাশ করে।
যেমন একটি প্রোগ্রামে নিচের মত করে “printf” ব্যবহার করা হয়ঃ
char name; printf(“%c”, name);
এখানে name নামে একটি Character variable নেওয়া হয়েছে। এখন মনে করি name এর মান কম্পিউটারে আছে আমরা তার Output বের করবো। তাই printf(“%c”, name); দ্বারা তা Output ডিভাইসে প্রকাশ করে। এখানে ও control string হচ্ছে c। scanf এর মর printf এ ও প্রতিটি control string একটি % চিহ্ন দিয়ে শুরু করতে হয়। তাই এখানে control string টি %c দ্বারা লিখা হয়েছে। এখানে c দ্বারা বুঝানো হয় যে ডেটা আইটেমটি একটি সিঙ্গেল কারেক্টার । scanf ও printf এর control string একই। scanf এর কন্ট্রোল স্ট্রিং বা প্লেসহোল্ডার দ্বারা কি ধরনের মান ইনপুট নিবে তা বুঝায়, আর printf এর কন্ট্রোল স্ট্রিং দ্বারা কি ধরনের মান আউটপুট দিবে তা বুঝায়।
printf ব্যবহার করে আমরা অনেক প্রোগ্রাম লিখেছি। আরেকটা লিখিঃ
#include <stdio.h> int main(void) { int roll; printf("Can you remember your roll no in class one?\nIf yes, please enter: " ); scanf("%d",&roll); printf("Your roll was: %d \n",roll); return 0; }
ডেটা ইনপুট আউটপুটের সময় আমরা পারসেন্ট সাইন এর পর একটা ক্যারেক্টার লিখি একটি ভ্যারিয়েবলের প্লেস হোল্ডার হিসেবে। এগুলোকে Conversion Characters ও বলা হয়। নিচে সি প্রোগ্রামিং এ ব্যবহৃত কনভার্শন ক্যারেক্টার গুলোর একটা লিস্ট দেওয়া হলোঃ
কন্ট্রোল স্ট্রিং | Meaning |
%c | সিঙ্গেল ক্যারেক্টার ইনপুট বা আউটপুটের জন্য এটি ব্যবহার করা হয়। |
%d | Signed ডেসিম্যাল ইন্টিজার এর জন্য ব্যবহৃত হয়। |
%e | e নোটেশনে Signed ফ্লোটিং পয়েন্ট জন্য ব্যবহৃত হয়। |
%f | Signed ফ্লোটিং পয়েন্ট জন্য ব্যবহৃত হয়। |
%g | সাইন্টিফিক নোটেশনে Signed ফ্লোটিং পয়েন্ট জন্য ব্যবহৃত হয়। |
%i | Signed ডেসিম্যাল ইন্টিজার এর জন্য ব্যবহৃত হয়। |
%o | Unsigned অক্টাল ইন্টিজার ডেটার জন্য ব্যহৃত হয় |
%s | এটি ব্যবহার করলে String Data item আউটপুট দিবে। |
%u | Unsigned ডেসিম্যাল ইন্টিজার এর জন্য ব্যবহৃত হয়। |
%x | Unsigned Hexadecimal Data এর জন্য ব্যবহৃত হয়। |
একটি মান পজেটিভ হতে পারে, নেগেটিভ হতে পারে। নেগেটিভ হলে আমরা সধারনত মাইনাস সাইন আগে বসাই। একটা নাম্বার পজেটিভ নাকি নেগেটিভ, এটি উল্ল্যেখ করাকে বলে Signed ভ্যালু। আর উল্লেখ না করলে বলা হয় Unsigned ভ্যালু। সংখ্যার আগে কোন সাইন না থাকলে আমরা ধরে নেই ঐটা পজেটিভ সংখ্যা। উপরের কনভার্সেশন ক্যারেক্টার গুলো ছাড়াও আরো অনেক গুলো কনভার্সেশন ক্যারেক্টার রয়েছে। এগুলো এক এক একটা আবার অনেক ভাবে ব্যবহার করা যায়। যেমন e ছোট হাতে, বড় হাতে দুইভাবেই লেখা যায়। ছোট হাতে লিখলে প্রিন্ট করবে ছোট হাতের e, বড় হাতের E লিখলে প্রিন্ট করবে বড় হাতের ই। আবার রয়েছে lf, .5f, বা এমন। .5f এর মানে হচ্ছে দশমিকের পর ৫ ঘর পর্যন্ত প্রিন্ট করা। এগুলো আমরা আস্তে আস্তে শিখব।
এবার আমরা scanf ও printf এর ব্যবহারের উপর একটি ছোট্ট প্রোগ্রাম দেখিঃ
#include <stdio.h> int main(void) { char name[80]; scanf("%s",&name); printf("You enter: %s",name); return 0; }
এখানে একটি name নামে একটি character array (array সম্পর্কে পরে আলোচনা করা হবে) নেওয়া হয়েছে, যা মোট ৮০ টি character ধারন করতে পারবে(আসলে ৭৯ টি আরেকটি Null Character, যা সম্পর্কে পরে আলোচনা করা হবে) । তার পর এর মান ইনপুট ডিভাইস হতে নেওয়া হবে scanf function দ্বারা। scanf এর ভিতর %s দ্বারা বুঝানো হয়েছে যে এটি একটি String Input নিবে। তার পর এ মান printf(“%s”,name); দ্বারা পর্দায় আউটপুট দেখানো হয়েছে।
এখন আমরা scanf এবং printf এর ব্যবহার বিস্তারিত জানব। চেষ্টা করব দুইটাই এক সাথে শিখে নিতে। কারণ দুইটার ব্যবহার প্রায় একই রকম। একটা দিয়ে ডেটা ইনপুট নেওয়া হয়, আরেকটা দিয়ে ডেটা আউটপুট দেওয়া হয়।
এর আগে আমরা একটি মাত্র ভ্যালু ইনপুট এবং আউটপুট দিয়েছি। আমরা চাইলে দুইটা মান একই সাথে ইনপুট বা আউটপুট দিয়ে পারি। ইনপুটের জন্য লিখব এভাবেঃ
scanf("%d %d", &amp;amp;amp;num1, &amp;amp;amp;num2);
যেখানে দুইটা ইন্টিজার মান আমরা ইনপুট দিতে পারব। আউটপুটের জন্য লিখব এভাবেঃ
printf("%d %d", num1, num2);
এখানে num1 এবং num2 নামক ভ্যারিয়েবল গুলোর মান প্রিন্ট করবে। মান গুলো যখন আউটপুট পাবো, তখন আমরা পাবো ইন্টিজার হিসেবে। সম্পুর্ণ একটি প্রোগ্রামঃ
#include <stdio.h> int main(void) { int num1, num2; scanf("%d %d", &num1, &num2); printf("%d %d/n", num1, num2); return 0; }
আমরা চাইলে এক সাথে ইন্টিজার, ক্যারেক্টার, ফ্লোট ভ্যালু ইনপুট নিতে পারি এবং আউটপুট হিসেবে প্রিন্ট করতে পারি। নিচের প্রোগ্রামটি দেখিঃ
#include <stdio.h> int main(void) { char name[50]; int id; float gpa; printf("Enter your name, id and gpa: \n"); scanf("%s %d %f", &name, &id, &gpa); printf("Name: %s ID: %d GPA: %f \n", name, id, gpa); return 0; }
int main(void) keno deya hoyeche