C++ istream ফাংশন

C Istream Phansana



C++-এ 'স্ট্রিম' শব্দটি প্রোগ্রাম থ্রেড এবং i/o-এর মধ্যে অক্ষরের প্রবাহকে বর্ণনা করে। IO ডিভাইস এবং ফাইলগুলিতে ইনপুট এবং আউটপুট অ্যাকশনের জন্য C++ স্ট্রিম ক্লাস প্রয়োজন। এই ক্লাসগুলি প্রোগ্রামের ইনপুট এবং আউটপুট পরিচালনা করার জন্য ডিজাইন করা হয়েছে এবং তাদের বিশেষ কার্যকারিতা রয়েছে।

স্ট্রীম ক্লাস হায়ারার্কি

একটি C++ শ্রেণী এটিতে থাকা ডেটা পরিচালনা এবং পরিচালনা করার জন্য প্রয়োজনীয় পদ্ধতিগুলি নিয়ে গঠিত।

float, doubles, এবং classes হল int-এর অনুরূপ ডেটা প্রকার। একটি অনন্য ভেরিয়েবলের সাথে একটি ক্লাস এর ডেটা টাইপ হিসাবে একটি C++ অবজেক্ট হিসাবে উল্লেখ করা হয়। পূর্ব-নির্দিষ্ট বিশেষ বস্তু 'cin' এবং 'cout'-এর ডেটা প্রকার হিসাবে বিভিন্ন শ্রেণী রয়েছে।







'cout'-এ লেখা বা 'cin' থেকে পঠিত ডেটা হল C++-এর প্রোগ্রামগুলিতে বা বাইরে ডেটা প্রবাহের উদাহরণ। বর্তমানে, আমরা এটির জন্য নিম্নলিখিত চারটি শ্রেণী বিবেচনা করছি:



এটা স্ট্রিম
যেকোন উদ্দেশ্য এই ইনপুট স্ট্রীম দ্বারা পরিবেশিত হতে পারে. একটি istream এর একটি দৃষ্টান্ত হল cin.



ওস্ট্রিম
এটি বিভিন্ন ব্যবহার সহ একটি আউটপুট স্ট্রীম। Ostreams cout এবং cin আকারে আসে।





যদি স্রোত
এটি ইনপুট ফাইলের একটি প্রবাহ।

স্রোতের
এটি আউটপুট ফাইলের একটি প্রবাহ। উত্তরাধিকার এমন একটি ধারণা যা অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং-এ ব্যাপকভাবে ব্যবহৃত হয়, যেমন C++, যেখানে কিছু ক্লাস ইতিমধ্যে তৈরি করা অন্যান্য ক্লাসের বৈশিষ্ট্য গ্রহণ করে। পূর্বপুরুষ শ্রেণীগুলি তখন নতুন বৈশিষ্ট্যগুলির অন্তর্ভুক্তির মাধ্যমে নিজেদের বিশেষীকরণে পরিণত হয়।



যদি স্ট্রিম ক্লাস
একটি ifstream একটি istream হিসাবে একই পদ্ধতিতে চিকিত্সা করা যেতে পারে, এটি কি.

স্ট্রিম ক্লাসের
একইভাবে যদি ifstream ফাংশন করে, কিন্তু ইনপুটের পরিবর্তে আউটপুট সহ, একটি অফস্ট্রিম একটি আউটপুট ফাইল স্ট্রিম। একটি অফস্ট্রিম নির্মাণ, খোলা এবং কোনো ত্রুটি না থাকার পর যাচাই করার পর cout-এর মতোই ব্যবহার করা হয়।

আইওএস ক্লাস
এই শ্রেণী থেকে, সমস্ত স্ট্রিম ক্লাস অবতরণ. ইনপুট এবং আউটপুট স্ট্রীম দুটি ভিন্ন ধরনের।

এটি আইওএস বেসে স্ট্রিমের ইনপুট বা আউটপুট স্থিতি থেকে স্বতন্ত্র স্ট্রিম অংশগুলিকে সংজ্ঞায়িত করে।

ios বেসে আলোচনা করা সদস্যদের বিপরীতে, টেমপ্লেট প্যারামিটারের উপর নির্ভরশীল সদস্যদের এই অংশে বর্ণনা করা হয়েছে।

স্ট্রীম(ইনপুট)
আইওস্ট্রিম লাইব্রেরির জটিলতার কারণে, আমরা এই পাঠগুলিতে এটি সম্পূর্ণভাবে কভার করতে সক্ষম হব না। যাইহোক, আমরা সবচেয়ে বেশি ব্যবহৃত ফাংশনগুলি হাইলাইট করব। এই বিভাগে, আমরা বিভিন্ন কোণ (istream) থেকে ইনপুট ক্লাস দেখব।

আমরা শিখেছি যে নিষ্কাশন অপারেটর (>>) একটি ইনপুট স্ট্রীম থেকে ডেটা অর্জন করতে ব্যবহার করা হবে।

স্ট্রিম

C++ প্রোগ্রামিং ভাষায়, ইনপুট স্ট্রীম istream ক্লাস দ্বারা পরিচালিত হয়। এই ইনপুট স্ট্রীম অবজেক্টগুলি ব্যবহার করে অক্ষরগুলির একটি সিরিজ হিসাবে ইনপুট পড়া এবং বোঝা যায়। ইনপুট সিন দ্বারা পরিচালিত হয়।

সদস্য ক্লাস

আইস্ট্রিম::সেন্ট্রি
একটি ক্লাস যা অনেকগুলি কাজ করে এবং প্রতিবার একটি ইনপুট পদ্ধতি সঞ্চালিত হয়। এর বিধ্বংসী কোনো ক্রিয়া সম্পাদনের প্রয়োজন নেই। যাইহোক, ইমপ্লিমেন্টেশনগুলি সেন্ট্রি অবজেক্টের সৃষ্টি এবং ধ্বংস ব্যবহার করে সমস্ত ইনপুট অপারেশন দ্বারা ভাগ করা স্ট্রীমে অতিরিক্ত স্টার্টআপ বা ক্লিনআপ কাজগুলি সম্পাদন করতে পারে।

ফাংশন

istream::gcount
অক্ষর গণনা দেয় যা অবজেক্টের সবচেয়ে সাম্প্রতিক বিন্যাসহীন ইনপুট অ্যাকশন থেকে প্রাপ্ত হয়েছিল। আনফরম্যাটেড ইনপুট পদ্ধতি— get, getline, ignore, peek, read, read some, putback, এবং unget — এই ফাংশন দ্বারা প্রত্যাবর্তিত মান পরিবর্তন করে। যাইহোক, মনে রাখবেন যে কলিং পিক, পুটব্যাক বা আনগেট কোনো অক্ষর বের করে না। ফলস্বরূপ, গণনা সর্বদা 0 ফিরে আসবে।

istream :: পান
একক অক্ষর একটি অক্ষরকে স্রোতের বাইরে নিয়ে যায়। অক্ষরটি হয় আর্গুমেন্টের মান হিসাবে সেট করা হয় বা ফেরত দেওয়া হয় (প্রথম স্বাক্ষর) (দ্বিতীয় স্বাক্ষর)।

সি স্ট্রিং: যদি সীমাবদ্ধকারী অক্ষরটি উপস্থিত থাকে, তবে এটি উপস্থিত থাকলে স্ট্রীম থেকে পুনরুদ্ধার করার জন্য নিম্নলিখিত অক্ষর হিসাবে রাখা ইনপুট ক্রম থেকে সরানো হয় না।

istream::getline
স্ট্রীম থেকে অক্ষরগুলিকে আনফরম্যাটেড ইনপুট হিসাবে সরিয়ে দেয় এবং সেগুলিকে 's' ভেরিয়েবলের একটি সি-স্ট্রিং হিসাবে সংরক্ষণ করে যতক্ষণ না নিষ্কাশিত অক্ষরটি সীমাবদ্ধ অক্ষর হয়ে যায় বা 'n' অক্ষরগুলি 's' তে লেখা না হয়। উপরন্তু, পদ্ধতিটি অক্ষর নিষ্কাশন করা বন্ধ করবে যদি এটি ফাইলের শেষে পৌঁছায়।

অভ্যন্তরীণভাবে, ইনপুট ক্রম অ্যাক্সেস করার আগে ফাংশন একটি বস্তু তৈরি করে। অবশেষে, এটি ফিরে আসার আগে অবজেক্টটিকে মেরে ফেলে, এর সাথে যুক্ত স্ট্রিম বাফার অবজেক্ট থেকে অক্ষর বের করে (অনুমান করে সব কিছু ঠিক আছে) যেন তার সদস্য পদ্ধতি, sbumpc বা sgetc এর একটি চালাচ্ছে।

istream::ignore
অক্ষরগুলি ইনপুট ক্রম থেকে নেওয়া হয় এবং একবারে একটি বাতিল করা হয় যতক্ষণ না হয় 'n' অক্ষরগুলি বের করা হয় বা একটি ডেলিমের সমান তুলনা করা হয়। অতিরিক্তভাবে, যদি ফাইলের শেষ পর্যন্ত পৌঁছে যায়, ফাংশনটি অক্ষর নিষ্কাশন বন্ধ করে দেয়। ফাংশনটি 'eofbit' ফ্ল্যাগ সেট করে যদি এটি খুব শীঘ্রই এই বিন্দুতে পৌঁছায় (n অক্ষর বের করার আগে বা ডেলিম আবিষ্কার করার আগে)।

ইনপুট সিকোয়েন্স অ্যাক্সেস করার আগে, ফাংশনটি অভ্যন্তরীণভাবে একটি সেন্ট্রি অবজেক্ট তৈরি করে (নোস্কিপস সহ সত্য হবে)। অবশেষে, এটি ফিরে আসার আগে সেন্ট্রি অবজেক্টকে মেরে ফেলে, এর সাথে যুক্ত স্ট্রীম বাফার অবজেক্ট থেকে অক্ষর বের করে (ধরে নিচ্ছে যে সবকিছু ঠিক আছে) যেন তার সদস্য পদ্ধতিগুলির মধ্যে একটি চালাচ্ছে: sbumpc বা sgetc।

istream::operator>>
নিষ্কাশন অপারেটর (>>) এই অপারেটরটিকে একটি ইনপুট স্ট্রীমে প্রয়োগ করে। এটি একটি ফাংশন হিসাবে অনেক সদস্য আছে.

পাটিগণিতের ধরন

অক্ষরগুলিকে স্ট্রীমের বাইরে নিয়ে যাওয়া হয় এবং সঠিক প্রকারের একটি মান উপস্থাপন করার জন্য ক্রমানুসারে পার্স করা হয়, যা তারপর 'ভাল' এর মান হিসাবে সংরক্ষিত হয়। ইনপুট সিকোয়েন্স অ্যাক্সেস করার আগে, ফাংশনটি অভ্যন্তরীণভাবে একটি সেন্ট্রি অবজেক্ট তৈরি করে (noskipws মিথ্যা হবে)। যদি সবকিছু ভালভাবে চেক আউট হয়, তাহলে স্ট্রীমের অভ্যন্তরীণ স্থিতির ফ্ল্যাগগুলি সংশোধন করার সময় নিষ্কাশন এবং পার্সিং প্রক্রিয়াগুলি সম্পূর্ণ করতে num get::get চালায়। সেন্ট্রি বস্তুটি চলে যাওয়ার আগেই শেষ পর্যন্ত ধ্বংস হয়ে যায়।

ইনপুট ক্রম পড়ার আগে ফাংশনটি অভ্যন্তরীণভাবে একটি সেন্ট্রি অবজেক্ট তৈরি করে, এটিকে ফরম্যাট করা ইনপুট হিসাবে দেখা হয়। অবশেষে, এটি ফিরে আসার আগে সেন্ট্রি অবজেক্টকে মেরে ফেলে, এর সাথে যুক্ত স্ট্রীম বাফার অবজেক্ট থেকে অক্ষর বের করে (ধরে নিচ্ছে যে সবকিছু ঠিক আছে) যেন তার সদস্য পদ্ধতি, sbumpc বা sgetc এর একটি কার্যকর করছে।

ম্যানিপুলেটর

পিএফ (*এটি) বলা হয়, যেখানে পিএফ একটি ম্যানিপুলেটর হতে পারে। ম্যানিপুলেটরগুলি এমন রুটিনগুলি তৈরি করা হয়েছে বিশেষ করে যখন এই অপারেটরকে ডাকা হয় তখন বলা হয়। ইনপুট ক্রম এই পদ্ধতির দ্বারা প্রভাবিত হয় না এবং কোন অক্ষর বের করা হয় না।

istream::পুটব্যাক
পুনরুদ্ধার করা অক্ষরটি স্ট্রীমের একটি অক্ষরের নিচে কার্সারটিকে সরানোর চেষ্টা করে যাতে স্ট্রীম থেকে পুনরুদ্ধার করা শেষ অক্ষরটি আবার ইনপুট অপারেশনের মাধ্যমে বের করা যায়।

ইনপুট ক্রম অ্যাক্সেস করার আগে, ফাংশনটি অভ্যন্তরীণভাবে একটি সেন্ট্রি অবজেক্ট তৈরি করে। এটি তারপরে তার সম্পর্কিত স্ট্রিম বাফার অবজেক্টে (যদি ভাল) স্পুটব্যাক (সি) কল করে। সেন্ট্রি বস্তুটি চলে যাওয়ার আগেই শেষ পর্যন্ত ধ্বংস হয়ে যায়।

istream::পড়ুন
একটি ডেটা ব্লক পড়ুন:

'n' অক্ষরগুলি স্ট্রীম থেকে নেওয়া হয় এবং তারপরে 's' দ্বারা নির্দেশিত অ্যারেতে সংরক্ষণ করা হয়। এই ফাংশনটি কেবলমাত্র ডেটার বিষয়বস্তু পরিদর্শন না করে বা শেষে একটি নাল অক্ষর যোগ না করে ডেটার একটি ব্লকের প্রতিলিপি করে।

ফাংশনের মধ্যে, ইনপুট সিকোয়েন্স অ্যাক্সেস করার আগে প্রথমে একটি সেন্ট্রি অবজেক্ট তৈরি করা হয়। অবশেষে, এটি ফিরে আসার আগে সেন্ট্রি অবজেক্টকে মেরে ফেলে, এর সাথে যুক্ত স্ট্রীম বাফার অবজেক্ট থেকে অক্ষর বের করে (ধরে নিচ্ছে যে সবকিছু ঠিক আছে) যেন তার সদস্য পদ্ধতিগুলির মধ্যে একটি চালাচ্ছে: sbumpc বা sgetc।

সদস্য সংখ্যা কল করলে এই ফাংশনটি সঠিকভাবে পড়া এবং সংরক্ষণ করা অক্ষরের মোট সংখ্যা ফেরত দেবে।

istream::পঠনযোগ্য
এই ফাংশনটি স্ট্রীমের সাথে যুক্ত নির্দিষ্ট স্ট্রীম বাফার অবজেক্টের অভ্যন্তরীণ কাজের উপর নির্ভরশীল, যার আচরণটি স্ট্যান্ডার্ড ক্লাসের জন্য মূলত বাস্তবায়ন-সংজ্ঞায়িত।

ফাংশনের মধ্যে, ইনপুট সিকোয়েন্স অ্যাক্সেস করার আগে প্রথমে একটি সেন্ট্রি অবজেক্ট তৈরি করা হয়। তারপরে (যদি সফল হয়), এটি স্ট্রীম বাফার অবজেক্টের সুবিধার সদস্য ফাংশনকে কল করে যে সংখ্যাটি অক্ষর (বা sgetc) বের করতে 'sbumpc' কল করার আগে এখন কতগুলি অক্ষর পাওয়া যায় তা নির্ধারণ করতে। সেন্ট্রি বস্তুটি চলে যাওয়ার আগেই শেষ পর্যন্ত ধ্বংস হয়ে যায়।

istream::seekg
ইনপুট লাইনের অবস্থান নির্ধারণ করে যে নিচের অক্ষরটি ইনপুট স্ট্রীম থেকে কোথায় টানা হবে। ইনপুট ক্রম পড়ার আগে, ফাংশনটি অভ্যন্তরীণভাবে একটি সেন্ট্রি অবজেক্ট তৈরি করে। তারপরে (যদি ঠিক থাকে), এটি সংশ্লিষ্ট স্ট্রিম বাফার অবজেক্টে দুটি কলের একটি করে: pubseekpos (1) বা pubseekoff (2), (যদি থাকে)। অবশেষে, এটি সেন্ট্রি আইটেমটি বিলুপ্ত করে এবং প্রস্থান করে।

istream::sync
ইনপুট বাফার সারিবদ্ধ করুন:

লিঙ্ক করা স্ট্রীম বাফারের নিয়ন্ত্রিত ইনপুট ক্রম সিঙ্কে নিয়ে আসে। স্ট্রীমের সাথে সংযুক্ত স্ট্রীম বাফার অবজেক্টের নির্দিষ্ট বাস্তবায়ন অপারেশনের নির্দিষ্টতা নির্ধারণ করে।

istream::বলুন
ইনপুট ক্রম এর অবস্থান প্রাপ্ত করুন:

এটি ইনপুট স্ট্রীমে বর্তমান চরিত্রের অবস্থান দেয়। ফাংশনটি তখন -1 রিটার্ন করে। সদস্য ব্যর্থ হলে, এটি সত্য ফিরে.

এটি rdbuf()->pubseekoff প্রদান করে যদি না হয় (0,cur,in)। সেন্ট্রি বস্তুটি চলে যাওয়ার আগেই শেষ পর্যন্ত ধ্বংস হয়ে যায়।

istream::unget
অক্ষর সরান:

স্ট্রীম থেকে কার্সারটিকে একটি অক্ষরের নিচে সরানোর চেষ্টা করে যাতে স্ট্রীম থেকে পুনরুদ্ধার করা শেষ অক্ষরটি আবার ইনপুট অপারেশনের মাধ্যমে বের করা যায়।

সদস্য না

অপারেটর>> (আইস্ট্রিম)
নিষ্কাশন অপারেটর (>>) একটি ইনপুট স্ট্রীমে প্রয়োগ করা হলে এই কর্মের সাথে বিন্যাসিত ইনপুট প্রদান করে।

একটি অক্ষর: অক্ষর ক্রম এটি থেকে পরবর্তী অক্ষরটি নিয়ে যায় এবং এটিকে 'c' এর মান হিসাবে সংরক্ষণ করে। একটি হোয়াইটস্পেস অক্ষর সম্মুখীন হলে বা (প্রস্থ ()-1) অক্ষর নিষ্কাশন করা হলে is থেকে অক্ষরগুলি বের করে নেওয়ার এবং একটি সি-স্ট্রিং হিসাবে সেগুলিকে s এ সংরক্ষণ করার প্রক্রিয়াটি বন্ধ হয়ে যায় (যদি প্রস্থ শূন্য না হয়)।

rvalue এর নিষ্কাশন: rvalue istream অবজেক্ট থেকে নিষ্কাশন সক্ষম করে, যার ফলাফল lvalues ​​থেকে নিষ্কাশনের সমান: এটি হল>>ভালকে কল করে।

উদাহরণ 1

এই ক্ষেত্রে, আমরা পরীক্ষা করব কীভাবে আমরা ব্যবহারকারীর কাছ থেকে কোনও মান পেতে পারি এবং তারপরে এটি স্ক্রিনে ফলাফল হিসাবে প্রদর্শন করব।

# অন্তর্ভুক্ত করুন
ব্যবহার নামস্থান std ;
int প্রধান ( )
{
int না ;
cout << 'অনুগ্রহ করে একটি নম্বর লিখুন' ;
খাওয়া >> না ;
cout << 'প্রবিষ্ট মান হল:' << না << ' \n ' ;
}

আমরা হেডার ফাইল অন্তর্ভুক্ত করব। এর পরে, আমরা স্ট্যান্ডার্ড নেমস্পেসে নেমস্পেস 'std' ব্যবহার করব। আমরা ফাংশনটিকে মেইন() বলব। এই পদ্ধতির মধ্যে 'no' নামের একটি ভেরিয়েবল ঘোষণা করা হবে। এই ভেরিয়েবলের জন্য 'int' ডেটা টাইপ উপস্থাপন করা হয়। 'int' শব্দটি একটি পূর্ণসংখ্যার সংক্ষিপ্ত রূপ। পরে, 'cout' বিবৃতি ব্যবহার করা হয়। এই কমান্ডটি লাইনটি প্রিন্ট করে।

এই পাঠ্যটি স্ক্রিনে প্রদর্শিত হওয়ার পরে ব্যবহারকারী যেকোনো র্যান্ডম মান ইনপুট করবে। তারপর, 'cin' বিবৃতি ব্যবহার করা হবে. এই কমান্ডের জন্য ব্যবহারকারীকে মান নির্দেশ করতে হবে। ব্যবহারকারীর প্রবেশ করা নম্বরটি একটি ভেরিয়েবলে সংরক্ষণ করা হবে। ব্যবহারকারীর দেওয়া মান 'cout' কমান্ড ব্যবহার করে স্ক্রিনে প্রদর্শিত হবে।

উদাহরণ 2

এই উদাহরণে, আমরা দেখব কিভাবে আমরা ব্যবহারকারীর কাছ থেকে কোন নাম পাই এবং তারপর ফলাফল হিসাবে এটি স্ক্রিনে দেখাই।

#অন্তর্ভুক্ত করুন
ব্যবহার নামস্থান std ;

int প্রধান ( )

{

চর নাম [ 125 ] ;
cout << 'আপনার নাম প্রবেশ করুন' << endl ;


খাওয়া >> ws ;

খাওয়া . গেটলাইন ( নাম 125 ) ;

cout << নাম << endl ;

ফিরে 0 ;

}

আমরা হেডার ফাইল অন্তর্ভুক্ত করব। এর পরে, আমরা স্ট্যান্ডার্ড নেমস্পেসটি 'std' হিসাবে ব্যবহার করব। আমরা main() ফাংশন চালু করব। এই পদ্ধতির মধ্যে, আমরা একটি পরিবর্তনশীল ঘোষণা করব। এই ভেরিয়েবলটি 'char' ডেটা টাইপ ধারণ করে। তারপর 'cout' বিবৃতি নিযুক্ত করা হয়। এই কমান্ডটি স্ক্রিনে 'আপনার নাম লিখুন' পাঠ্যটি দেখায়। এই টেক্সটটি স্ক্রিনে দেখানোর পর ব্যবহারকারী যেকোনো নাম লিখবেন। তারপর, আমরা 'cin' বিবৃতিটি ব্যবহার করব।

এই কমান্ডটি ব্যবহারকারীর কাছ থেকে মান নেয়। প্রদত্ত নাম একটি পরিবর্তনশীল 'ws' এ সংরক্ষণ করা হবে। এখানে, আবার, আমরা 'cin' কমান্ডটি ব্যবহার করব। এই কমান্ডের মধ্যে, getline() ফাংশন প্রয়োগ করা হচ্ছে। এই ফাংশনটিতে প্যারামিটার রয়েছে যা ব্যবহারকারীর দ্বারা প্রবেশ করা নাম এবং নামের দৈর্ঘ্য অন্তর্ভুক্ত করে। ব্যবহারকারীর দেওয়া নাম দেখানোর জন্য 'cout' কমান্ড ব্যবহার করা হবে। কোডটি বন্ধ করতে, 'রিটার্ন 0' কমান্ডটি ব্যবহার করা হবে।

উপসংহার

প্রথমে, আমরা C++ istream ফাংশন কী তা নিয়ে কথা বলেছি। তারপর আমরা উল্লিখিত বেশ কয়েকটি ফাংশন এবং গুরুত্বপূর্ণ সংজ্ঞা পর্যবেক্ষণ করি। এই প্রবন্ধে, আমরা বিভিন্ন কোড চালালাম যাতে বিভিন্ন ধরনের istream ফাংশন রয়েছে। প্রথম কোডে, আমরা ব্যবহারকারীর কাছ থেকে যে কোনও নম্বর নিয়ে থাকি এবং সেই নম্বরটি স্ক্রিনে প্রদর্শন করি। দ্বিতীয়টিতে, ব্যবহারকারী নামটি প্রবেশ করান এবং সেই নামটি স্ক্রিনে প্রিন্ট করেন।