ভেরিয়েবলে মান সংরক্ষন
ভেরিয়েবলে আপনি দুই ভাবে মান সংরক্ষন করতে পারেন।
প্রথম উপায়ঃ ভেরিয়েবল এর পরে সমান চিহ্ন দিয়ে যেই মান রাখতে চান সেই মান এবং সবশেষে সেমিকোলন।প্রোগ্রামের ভাষায় সমান চিহ্ন কে এসাইনমেন্ট অপারেটর বলে। যেমনঃ
এখানে প্রথম লাইনে a নামে ভেরিয়েবল ডিক্লেয়ার করা হয়েছে এবং দ্বিতীয় লাইনে a এর মাঝে 12 মান সংরক্ষন করা হয়েছে। কোন একটি ভেরিয়েবলে এসাইনমেন্ট অপারেটর (=) দিয়ে একটি মান রাখাকে বলা হয় initialization of variable.
আপনি ভেরিয়েবল ডিক্লেয়ার করার সাথে সাথে ভেরিয়েবলের মান initialize করে দিতে পারেন। যেমনঃ
একটি ভেরিয়েবলে ইচ্ছে করলে আরেকটি ভেরিয়েবলের মানও রাখতে পারেন। যেমনঃ
কিন্তু নিচের কোডটি সঠিক নয়ঃ
কেন? আপনি চিন্তা করলে উত্তর পেয়ে যাবেন। তারপরেও বলে দিচ্ছি আমার সাথে আপনার উত্তর মিলিয়ে নিনঃ
কম্পাইলার প্রথমে পাবে a=12; যার মানে হলঃ a নামের ভেরিয়েবলে 12 মানটি রাখতে হবে। কিন্তু a নামে তো কোন মেমরী এড্রেসই তৈরি হয়নি। দ্বিতীয় লাইনে এসে পাবে int a; যার মানে a নামের একটি মেমরী এড্রেস তৈরি হয়েছে যেখানে int (পূর্ণ সংখ্যা) টাইপের মান রাখা যাবে। a=12; লাইনটি int a; লাইনের পরে লিখলেই উপরের কোডটি সঠিক হয়ে যাবে।অর্থাৎ কোন ভেরিয়েবলে মান রাখার আগেই সেই ভেরিয়েবলটি ডিক্লেয়ার করতে হবে। এই আলোচনার প্রমান দেখতে নিচের কোডটি রান করে দেখুন এরর দেখাবে।
কিন্তু নিচের প্রোগ্রামটি সঠিক ভাবে রান করবেঃ
নিচের কোডটি সঠিক নয়ঃ
কারনঃ b = a; লেখার অর্থ হলঃ b এর মাঝে a এর মান রাখা হোক। কিন্তু a এর মাঝে কোন মান রাখা হয়নি। পরের লাইনে a=12; লিখে a এর মাঝে 12 মানটি রাখা হয়েছে।
দ্বিতীয় উপায়ঃ
প্রথম উপায়ে আপনি ভেরিয়েবলে যেই মান রেখেছেন সেটি প্রোগ্রাম রান করার পর পরিবর্তন করা যাবে না। এখন আপনি যদি চান প্রোগ্রাম রান করার পর একটি মান ইনপুট দিবেন এবং সেই মানটি একটি ভেরিয়েবলে রাখবেন তাহলে scanf() ফাংশন ব্যবহার করতে হবে। মনে করুন আপনি প্রোগ্রাম রান করার পর কীবোর্ড থেকে 32 ইনপুট দিবেন এবং সেটি a নামের একটি ভেরিয়েবলে রাখবেন। তাহলে scanf() ফাংশনটি হবে নিচের মতঃ
এখানে, scanf() ফাংশনের ভিতরে ডাবল ইনভার্টেট কমার ভিতরে %d দিয়ে বুঝানো হচ্ছে একটি পূর্ণসংখ্যা ইনপুট নেওয়া হচ্ছে এবং কমা দিয়ে &a লিখার অর্থ হল ইনপুট দেওয়া সংখ্যাটি a ভেরিয়েবলে রাখা হবে। এখন আপিনি যদি একটি ভগ্নাংশ রাখতে চান তাহলে %d এর পরিবর্তে %f লিখতে হবে। সম্পূর্ন কোডটি হবেঃ
আবার মনে করুন, দুইটি ভেরিয়েবলে দুইটি পূর্ণসংখ্যা রাখবেন, তাহলে নিচের মত লিখতে হবেঃ
আপনি যদি প্রথমে 12 এবং পরে 15 ইনপুট দেন তাহলে 12 রাখবে a এর মাঝে এবং 15 রাখবে b এর মাঝে। অর্থাৎ প্রথম %d টা হল &a এর জন্য এবং দ্বিতীয় %d টা &b এর জন্য। এখন নিচের কোডটির কোথায় সমস্যা তা বের করুনঃ
আশাকরি আপনি ভুলটি ধরতে পেরেছেন। তারপরেও আমি বলে দিচ্ছি, আমার সাথে মিলিয়ে নিন-
%d%f মানে হল প্রথম ইনপুটটি একটি পূর্নসংখ্যা এবং দ্বিতীয় ইনপুটটি একটি ভগ্নাংশ। আবার &b,&a মানে হল প্রথম ইনপুটটি b তে এবং দ্বিতীয় ইনপুটটি a তে রাখতে হবে। অর্থাৎ পূর্নসংখ্যা রাখতে চাচ্ছেন b তে কিন্তু b কে ডিক্লেয়ার করেছেন float হিসাবে। আবার ভগ্নাগ্নশ রাখতে চাচ্ছেন a তে কিন্তু a কে ডিক্লেয়ার করেছেন int হিসাবে। উপরের কোডটি নিচের মত করে যেকোন একভাবে লিখলে সঠিক হবেঃ
অথবা
অথবা
এখন a এবং b এর মানগুলো দেখতে নিচের কোডটি রান করুনঃ
Code Example
OUTPUT
Enter two values: 56 61.65
a = 56 and b = 61.65
বিঃদ্রঃ scanf() ফাংশনের মাধ্যমে ভেরিয়েবলে মান রাখতে ভেরিয়েবলের আগে &(এম্পারসেন্ট) ব্যবহৃত হয় কিন্তু printf() ফাংশনের মাধ্যমে ভেরিয়েবলের মান দেখাতে ভেরিয়েবলের আগে &(এম্পারসেন্ট) ব্যবহৃত হয় না।