cin.ignore() ফাংশনটি ইনপুট বাফার থেকে এক বা একাধিক ক্যারেক্টার উপেক্ষা বা ক্লিয়ার করতে ব্যবহৃত হয়।
ignore() কীভাবে কাজ করে তা বুঝতে একটি সমস্যা এবং তার সমাধান দেখতে হবে। সমস্যাটি নিচের মতো:
কখনও কখনও আমাদের অবাঞ্ছিত বাফার ক্লিয়ার করতে হয়, যাতে পরবর্তী ইনপুট নেওয়ার সময় সেটি ডিজায়ার্ড কন্টেইনারে স্টোর হয়, কিন্তু পূর্বের ভেরিয়েবলের বাফারে না। উদাহরণস্বরূপ, cin স্টেটমেন্টে ইনপুট দেয়ার পর, আমাদের একটি ক্যারেক্টার অ্যারে বা স্ট্রিং ইনপুট নেওয়া দরকার। তাই ইনপুট বাফার ক্লিয়ার করতে হয়, অন্যথায় এটি পূর্বের ভেরিয়েবলের বাফারে দখল করবে। প্রথম ইনপুটের পর Enter কী দবায়, যেহেতু পূর্বের ভেরিয়েবলের বাফারে নতুন ডেটা ধারণ করার জায়গা থাকে, তাই প্রোগ্রাম পরবর্তী কন্টেইনারের ইনপুট বাদ দিয়ে চলে যায়।
উদাহরণ: সমস্যা
#include <iostream>
#include <vector>
using namespace std;
int main() {
int x;
char str[80];
cout << "Enter a number and a string:\n";
cin >> x;
cin.getline(str, 80); // একটি স্ট্রিং নেওয়া
cout << "You have entered:\n";
cout << x << endl;
cout << str << endl;
}
আউটপুট
Enter a number and a string: 8 You have entered: 8
দুটি cin স্টেটমেন্ট আছে পূর্ণসংখ্যা এবং স্ট্রিং-এর জন্য, কিন্তু শুধু সংখ্যাটি নেওয়া হয়েছে। যখন আমরা এন্টার কী চাপি, তবে এটি getline() ফাংশনকে ইনপুট নেওয়া ছাড়াই বাদ দিয়ে চলে যায়। কখনও কখনও এটি ইনপুট নেওয়া পারে কিন্তু পূর্ণসংখ্যা ভেরিয়েবলের বাফারের ভেতরে, তাই স্ট্রিং আউটপুট হিসেবে দেখা যায় না।
এই সমস্যা সমাধান করতে আমরা cin.ignore() ফাংশন ব্যবহার করব। এই ফাংশনটি দিয়ে দেওয়া রেঞ্জ পর্যন্ত ইনপুট উপেক্ষা করা যায়। যদি আমরা নিচের স্টেটমেন্ট লিখি:
cin.ignore(numeric_limits<streamsize>::max(), '\n')
তবে এটি নতুন লাইন ক্যারেক্টার সহ ইনপুট উপেক্ষা করে।
উদাহরণ: সমাধান
#include <iostream>
#include <ios> // 스트림 সাইজ পেতে
#include <limits> // numeric limits পেতে
using namespace std;
int main() {
int x;
char str[80];
cout << "Enter a number and a string:\n";
cin >> x;
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // নতুন লাইন নেওয়ার আগে বাফার ক্লিয়ার
cin.getline(str, 80); // স্ট্রিং নেওয়া
cout << "You have entered:\n";
cout << x << endl;
cout << str << endl;
}
আউটপুট
Enter a number and a string: 4 Hello World You have entered: 4 Hello World