C++ istream افعال

C Istream Af Al

C++ میں 'سٹریم' کی اصطلاح پروگرام تھریڈ اور i/o کے درمیان حروف کے بہاؤ کو بیان کرتی ہے۔ IO ڈیوائسز اور فائلوں پر ان پٹ اور آؤٹ پٹ ایکشنز کے لیے C++ اسٹریم کلاسز کی ضرورت ہے۔ ان کلاسز کو پروگرام کے ان پٹ اور آؤٹ پٹ کو منظم کرنے کے لیے ڈیزائن کیا گیا ہے اور ان میں خاص فعالیت ہے۔

سٹریم کلاس کا درجہ بندی

ایک C++ کلاس ان طریقوں پر مشتمل ہوتی ہے جو اس میں موجود ڈیٹا کو منظم کرنے اور اس پر حکومت کرنے کے لیے درکار ہوتے ہیں۔

فلوٹ، ڈبلز اور کلاسز int کی طرح ڈیٹا کی قسمیں ہیں۔ کلاس کے ساتھ ایک منفرد متغیر اس کے ڈیٹا کی قسم کو C++ آبجیکٹ کے طور پر کہا جاتا ہے۔ پہلے سے متعین خصوصی اشیاء 'cin' اور 'cout' کی ڈیٹا کی اقسام کے طور پر مختلف کلاسز ہیں۔



'cout' پر لکھا گیا یا 'cin' سے پڑھا جانے والا ڈیٹا C++ میں پروگراموں میں یا اس سے باہر ڈیٹا کے بہاؤ کی مثالیں ہیں۔ فی الحال، ہم اس کے لیے درج ذیل چار کلاسوں پر غور کر رہے ہیں:



اسے اسٹریم کریں۔
اس ان پٹ سٹریم سے کوئی بھی مقصد پورا ہو سکتا ہے۔ istream کی ایک مثال cin ہے۔



اوسٹریم
یہ ایک آؤٹ پٹ اسٹریم ہے جس میں کئی استعمال ہوتے ہیں۔ Ostreams cout اور cin کی شکل میں آتے ہیں۔

اگر ندی
یہ ان پٹ فائلوں کا ایک سلسلہ ہے۔

ندی کا
یہ آؤٹ پٹ فائلوں کا ایک سلسلہ ہے۔ وراثت ایک ایسا تصور ہے جو آبجیکٹ اورینٹڈ پروگرامنگ میں بہت زیادہ استعمال ہوتا ہے، جیسے C++ میں، جہاں کچھ کلاسیں پہلے سے بنی ہوئی دوسری کلاسوں کی خصوصیات کو لے لیتی ہیں۔ اس کے بعد آباؤ اجداد کی کلاسیں نئی ​​خصوصیات کی شمولیت کے ذریعے خود کی خصوصیت بن جاتی ہیں۔



اگر اسٹریم کلاس
آئی اسٹریم کے ساتھ آئی اسٹریم کی طرح سلوک کیا جاسکتا ہے ، جو یہ ہے۔

اسٹریم کلاس کا
اسی طرح کہ ifstreams فنکشنز، لیکن ان پٹ کے بجائے آؤٹ پٹ کے ساتھ، ایک آف اسٹریم ایک آؤٹ پٹ فائل اسٹریم ہے۔ ایک آف اسٹریم کا استعمال اسی طرح کیا جاتا ہے جیسے cout کی تعمیر، کھولنے، اور تصدیق ہونے کے بعد کہ اس میں کوئی غلطی نہیں ہے۔

آئی او ایس کلاس
اس کلاس سے، تمام سٹریم کلاسز اترے ہیں۔ ان پٹ اور آؤٹ پٹ اسٹریمز دو مختلف قسم کے ہیں۔

یہ سٹریم پارٹس کی وضاحت کرتا ہے جو ios بیس میں سٹریم کے ان پٹ یا آؤٹ پٹ سٹیٹس سے آزاد ہیں۔

ios بیس میں زیر بحث ممبران کے برعکس، ٹیمپلیٹ پیرامیٹرز پر انحصار کرنے والے ممبران کو اس حصے میں بیان کیا گیا ہے۔

سلسلہ (ان پٹ)
iostream لائبریری کی پیچیدگی کی وجہ سے، ہم ان اسباق میں اس کا مکمل احاطہ نہیں کر سکیں گے۔ تاہم، ہم ان افعال کو نمایاں کریں گے جو سب سے زیادہ استعمال ہوتے ہیں۔ اس سیکشن میں، ہم ان پٹ کلاس کو مختلف زاویوں (istream) سے دیکھیں گے۔

ہم نے سیکھا ہے کہ ایکسٹرکشن آپریٹر (>>) کو ان پٹ اسٹریم سے ڈیٹا حاصل کرنے کے لیے استعمال کیا جائے گا۔

ندی

C++ پروگرامنگ لینگویج میں، ان پٹ اسٹریم کو istream کلاس کے ذریعے ہینڈل کیا جاتا ہے۔ ان پٹ کو ان پٹ اسٹریم آبجیکٹ کا استعمال کرتے ہوئے حروف کی ایک سیریز کے طور پر پڑھا اور سمجھا جاتا ہے۔ ان پٹ کو سن کے ذریعہ سنبھالا جاتا ہے۔

ممبر کلاسز

istream ::سینٹری
ایک کلاس جو بہت سے کام انجام دیتی ہے اور ہر بار ایک ان پٹ طریقہ کار انجام دیتی ہے۔ اس کے ڈسٹرکٹر کو کوئی کارروائی کرنے کی ضرورت نہیں ہے۔ تاہم، نفاذات تمام ان پٹ آپریشنز کے ذریعے مشترکہ طور پر سنٹری آبجیکٹ کی تخلیق اور تباہی کا استعمال کرتے ہوئے سٹریم پر اضافی سٹارٹ اپ یا صفائی کے کاموں کو انجام دے سکتے ہیں۔

افعال

istream::gcount
کریکٹر کی گنتی دیتا ہے جو آبجیکٹ کے حالیہ غیر فارمیٹ شدہ ان پٹ ایکشن سے حاصل کیا گیا تھا۔ غیر فارمیٹ شدہ ان پٹ طریقہ کار — get, getline, ignore, peek, read, read some, putback, and unget — اس فنکشن کے ذریعے واپس آنے والی قدر کو تبدیل کرتے ہیں۔ تاہم، اس بات کو ذہن میں رکھیں کہ کال کرنے سے peeks، putback، یا unget کوئی حرف نہیں نکلتا۔ نتیجے کے طور پر، گنتی ہمیشہ 0 واپس آئے گی۔

istream::get
واحد کردار ایک کردار کو دھارے سے باہر لے جاتا ہے۔ کردار کو یا تو دلیل کی قدر کے طور پر سیٹ کیا جاتا ہے یا واپس کیا جاتا ہے (پہلا دستخط) (دوسرا دستخط)۔

C سٹرنگ: اگر حد بندی کرنے والا کریکٹر موجود ہے، تو اسے ان پٹ سیکوئنس سے نہیں ہٹایا جاتا ہے بجائے اس کے کہ اگر یہ موجود ہو تو اسے سٹریم سے بازیافت کرنے کے لیے درج ذیل کریکٹر کے طور پر رکھا جاتا ہے۔

istream::getline
سٹریم سے حروف کو غیر فارمیٹڈ ان پٹ کے طور پر ہٹاتا ہے اور انہیں متغیر 's' میں c-string کے طور پر محفوظ کرتا ہے جب تک کہ نکالا ہوا کریکٹر حد بندی کرنے والا کردار نہیں بن جاتا یا 'n' حروف کو 's' میں لکھا جاتا ہے۔ مزید برآں، اگر یہ فائل کے آخر تک پہنچ جاتا ہے تو یہ طریقہ حروف کو نکالنا بند کر دے گا۔

اندرونی طور پر، فنکشن ان پٹ کی ترتیب تک رسائی سے پہلے ایک آبجیکٹ بناتا ہے۔ آخر میں، یہ واپس آنے سے پہلے آبجیکٹ کو مار ڈالتا ہے، اس کے متعلقہ اسٹریم بفر آبجیکٹ سے حروف نکالتا ہے (یہ فرض کرتے ہوئے کہ سب کچھ ترتیب میں ہے) گویا اس کے ممبر کے کسی طریقے، sbumpc یا sgetc کو انجام دے رہا ہے۔

istream::ignore
حروف کو ان پٹ ترتیب سے لیا جاتا ہے اور ایک وقت میں ایک ایک کو مسترد کر دیا جاتا ہے جب تک کہ یا تو 'n' حروف نکالے نہ جائیں یا ایک کا موازنہ ڈیلم کے برابر نہ کر دیا جائے۔ مزید برآں، اگر فائل کا اختتام ہو جاتا ہے، تو فنکشن کریکٹر نکالنے کو روکتا ہے۔ فنکشن 'eofbit' جھنڈا سیٹ کرتا ہے اگر یہ بہت جلد اس مقام تک پہنچ جاتا ہے (n حروف کو نکالنے یا ڈیلم کو دریافت کرنے سے پہلے)۔

ان پٹ ترتیب تک رسائی حاصل کرنے سے پہلے، فنکشن اندرونی طور پر ایک سنٹری آبجیکٹ بناتا ہے (noskipws کے ساتھ صحیح ہو گا)۔ آخر میں، یہ سنٹری آبجیکٹ کو واپس آنے سے پہلے مار ڈالتا ہے، اس کے متعلقہ اسٹریم بفر آبجیکٹ سے حروف کو نکالتا ہے (یہ فرض کرتے ہوئے کہ سب کچھ ترتیب میں ہے) گویا اس کے ممبر طریقوں میں سے کسی ایک کو انجام دے رہا ہے: sbumpc یا sgetc۔

istream::operator>>
نکالنے والا آپریٹر (>>) اس آپریٹر کو ان پٹ اسٹریم پر لاگو کرتا ہے۔ فنکشن کے طور پر اس میں بہت زیادہ ممبران ہیں۔

ریاضی کی قسم

حروف کو سٹریم سے باہر نکالا جاتا ہے اور صحیح قسم کی قدر کی نمائندگی کرنے کے لیے ترتیب وار تجزیہ کیا جاتا ہے، جسے پھر 'val' کی قدر کے طور پر محفوظ کیا جاتا ہے۔ ان پٹ کی ترتیب تک رسائی سے پہلے، فنکشن اندرونی طور پر ایک سنٹری آبجیکٹ بناتا ہے (noskipws غلط ہوں گے)۔ اگر سب کچھ اچھی طرح سے جانچ پڑتال کرتا ہے، تو یہ پھر چلتا ہے num get::get نکالنے اور پارس کرنے کے عمل کو مکمل کرنے کے لیے جبکہ اسٹریم کے اندرونی حالت کے جھنڈوں میں ترمیم کرتے ہوئے سنٹری آبجیکٹ کے جانے سے پہلے ہی بالآخر تباہ ہو جاتا ہے۔

فنکشن داخلی طور پر ان پٹ ترتیب کو پڑھنے سے پہلے ایک سنٹری آبجیکٹ تیار کرتا ہے، اسے فارمیٹ شدہ ان پٹ پرفارم کرنے کے طور پر دیکھا جاتا ہے۔ آخر میں، یہ سنٹری آبجیکٹ کو واپس آنے سے پہلے مار ڈالتا ہے، اس کے متعلقہ سٹریم بفر آبجیکٹ سے حروف نکالتا ہے (یہ فرض کرتے ہوئے کہ سب کچھ ترتیب میں ہے) گویا اس کے ممبر کے کسی طریقے، sbumpc یا sgetc کو انجام دے رہا ہے۔

جوڑ توڑ کرنے والے

pf (*یہ) کہا جاتا ہے، جہاں pf ایک ہیرا پھیری ہو سکتا ہے۔ ہیرا پھیری کرنے والے معمولات ہیں جو خاص طور پر اس آپریٹر کو بلانے کے لیے بنائے جاتے ہیں۔ ان پٹ کی ترتیب اس طریقہ کار سے متاثر نہیں ہوتی ہے اور کوئی حرف نہیں نکالا جاتا ہے۔

istream::putback
بحال شدہ کردار کرسر کو سٹریم میں ایک کریکٹر کے نیچے لے جانے کی کوشش کرتا ہے تاکہ سٹریم سے حاصل کیا گیا آخری کریکٹر ایک بار پھر ان پٹ آپریشنز کے ذریعے نکالا جا سکے۔

ان پٹ کی ترتیب تک رسائی سے پہلے، فنکشن اندرونی طور پر ایک سنٹری آبجیکٹ بناتا ہے۔ اس کے بعد اس سے وابستہ اسٹریم بفر آبجیکٹ (اگر اچھا ہے) پر sputbackc(c) کو کال کرتا ہے۔ سنٹری آبجیکٹ کے جانے سے پہلے ہی بالآخر تباہ ہو جاتا ہے۔

istream::پڑھیں۔
ڈیٹا بلاک پڑھیں:

'n' حروف کو سٹریم سے لیا جاتا ہے اور پھر اس صف میں محفوظ کیا جاتا ہے جس کی طرف 's' کی طرف اشارہ کیا جاتا ہے۔ یہ فنکشن ڈیٹا کے مواد کا معائنہ کیے بغیر یا آخر میں ایک null کردار شامل کیے بغیر صرف ڈیٹا کے بلاک کو نقل کرتا ہے۔

فنکشن کے اندر، ان پٹ سیکوئنس تک رسائی سے پہلے پہلے ایک سنٹری آبجیکٹ بنایا جاتا ہے۔ آخر میں، یہ سنٹری آبجیکٹ کو واپس آنے سے پہلے مار ڈالتا ہے، اس کے متعلقہ اسٹریم بفر آبجیکٹ سے حروف کو نکالتا ہے (یہ فرض کرتے ہوئے کہ سب کچھ ترتیب میں ہے) گویا اس کے ممبر طریقوں میں سے کسی ایک کو انجام دے رہا ہے: sbumpc یا sgetc۔

ممبر کی تعداد کو کال کرنے سے ان حروف کی کل تعداد واپس آجائے گی جو اس فنکشن نے صحیح طریقے سے پڑھے اور محفوظ کیے ہیں۔

istream::پڑھنے والا
یہ فنکشن سٹریم سے منسلک مخصوص سٹریم بفر آبجیکٹ کے اندرونی کاموں پر منحصر ہے، جس کا طرز عمل بڑی حد تک معیاری کلاسوں کے لیے نافذ العمل ہے۔

فنکشن کے اندر، ان پٹ سیکوئنس تک رسائی سے پہلے پہلے ایک سنٹری آبجیکٹ بنایا جاتا ہے۔ پھر (اگر کامیاب ہو تو)، یہ سٹریم بفر آبجیکٹ کے استعمال میں ممبر فنکشن کو کال کرتا ہے تاکہ اس بات کا تعین کیا جا سکے کہ 'sbumpc' کو کال کرنے سے پہلے کتنے حروف دستیاب ہیں (یا sgetc) کی تعداد تک نکالنے کے لیے۔ سنٹری آبجیکٹ کے جانے سے پہلے ہی بالآخر تباہ ہو جاتا ہے۔

istream::seekg
ان پٹ لائن میں پوزیشن اس بات کا تعین کرتی ہے کہ درج ذیل کردار کو ان پٹ اسٹریم سے کہاں کھینچا جائے گا۔ ان پٹ ترتیب کو پڑھنے سے پہلے، فنکشن اندرونی طور پر ایک سنٹری آبجیکٹ بناتا ہے۔ پھر (اگر ٹھیک ہے)، یہ متعلقہ سٹریم بفر آبجیکٹ کو دو میں سے ایک کال کرتا ہے: pubseekpos (1) یا pubseekoff (2)، (اگر کوئی ہے)۔ آخر میں، یہ سنٹری آئٹم کو ختم کر دیتا ہے اور روانہ ہو جاتا ہے۔

istream::sync
ان پٹ بفر کو سیدھ کریں:

منسلک سٹریم بفر کے کنٹرول شدہ ان پٹ ترتیب کو مطابقت پذیری میں لاتا ہے۔ اسٹریم سے منسلک اسٹریم بفر آبجیکٹ کا مخصوص نفاذ آپریشن کی تفصیلات کا تعین کرتا ہے۔

istream::tellg
ان پٹ ترتیب کی پوزیشن حاصل کریں:

یہ ان پٹ اسٹریم میں موجودہ کردار کی پوزیشن فراہم کرتا ہے۔ فنکشن پھر -1 لوٹاتا ہے۔ اگر ممبر ناکام ہو جاتا ہے، تو یہ درست ہو جاتا ہے۔

یہ rdbuf()->pubseekoff واپس کرتا ہے اگر نہیں (0,cur,in)۔ سنٹری آبجیکٹ کے جانے سے پہلے ہی بالآخر تباہ ہو جاتا ہے۔

istream::unget
کردار کو ہٹا دیں:

کرسر کو سٹریم میں ایک کریکٹر کے نیچے لے جانے کی کوشش کرتا ہے تاکہ سٹریم سے حاصل کیا گیا آخری کریکٹر ایک بار پھر ان پٹ آپریشنز کے ذریعے نکالا جا سکے۔

غیر رکن

آپریٹر>> (آئی اسٹریم)
ایکسٹرکشن آپریٹر (>>) ان پٹ اسٹریم پر لاگو ہونے پر اس کارروائی کے ساتھ فارمیٹ شدہ ان پٹ فراہم کرتا ہے۔

ایک کریکٹر: کریکٹر سیکونس اگلے کریکٹر کو اس میں سے نکالتا ہے اور اسے 'c' کی قدر کے طور پر اسٹور کرتا ہے۔ اس سے حروف کو نکالنے اور انہیں s میں محفوظ کرنے کا عمل، بطور c-سٹرنگ، رک جاتا ہے (اگر چوڑائی صفر نہیں ہے) جب وائٹ اسپیس کریکٹر کا سامنا ہوتا ہے یا (چوڑائی ()-1) حروف نکالے جاتے ہیں۔

rvalue کا نکالنا: rvalue istream آبجیکٹ سے نکالنے کے قابل بناتا ہے، جس کا نتیجہ lvalues ​​سے نکالنے جیسا ہی ہوتا ہے: یہ اس کو>>Val کہتے ہیں۔

مثال 1

اس صورت میں، ہم اس بات کا جائزہ لیں گے کہ ہم کس طرح صارف سے کوئی قیمت حاصل کر سکتے ہیں اور پھر اسے اسکرین پر نتیجہ کے طور پر ظاہر کر سکتے ہیں۔

# شامل کریں
استعمال کرتے ہوئے نام کی جگہ std ;
int مرکزی ( )
{
int نہیں ;
cout << 'براہ کرم ایک نمبر درج کریں' ;
کھانا >> نہیں ;
cout << درج کردہ قدر ہے: << نہیں << ' \n ' ;
}

ہم ہیڈر فائل کو شامل کریں گے۔ اگلا، ہم معیاری نام کی جگہ میں 'std' نام کی جگہ استعمال کریں گے۔ ہم فنکشن مین () کو کال کریں گے۔ اس طریقہ کے اندر 'no' نامی ایک متغیر کا اعلان کیا جائے گا۔ اس متغیر کے لیے 'int' ڈیٹا کی قسم کی نمائندگی کی گئی ہے۔ اصطلاح 'int' ایک عدد کا مخفف ہے۔ اس کے بعد، 'cout' بیان استعمال کیا جاتا ہے۔ یہ کمانڈ لائن کو پرنٹ کرتی ہے۔

اس متن کے اسکرین پر ظاہر ہونے کے بعد صارف کوئی بھی بے ترتیب قدر ڈالے گا۔ پھر، 'cin' کا بیان استعمال کیا جاتا۔ اس کمانڈ کے لیے صارف کو قدر کی نشاندہی کرنے کی ضرورت ہے۔ صارف کا درج کردہ نمبر متغیر میں محفوظ ہو جائے گا۔ صارف کی طرف سے فراہم کردہ قدر کو 'cout' کمانڈ کا استعمال کرتے ہوئے اسکرین پر ظاہر کیا جائے گا۔

مثال 2

اس مثال میں، ہم دیکھیں گے کہ ہم صارف سے کوئی نام کیسے حاصل کرتے ہیں اور پھر اسے اسکرین پر نتیجہ کے طور پر دکھاتے ہیں۔

# شامل کریں
استعمال کرتے ہوئے نام کی جگہ std ;

int مرکزی ( )

{

چار نام [ 125 ] ;
cout << 'اپنا نام درج کریں' << endl ;


کھانا >> ws ;

کھانا . getline ( نام 125 ) ;

cout << نام << endl ;

واپسی 0 ;

}

ہم ہیڈر فائل کو شامل کریں گے۔ اگلا، ہم معیاری نام کی جگہ کو 'std' کے طور پر استعمال کریں گے۔ ہم مین () فنکشن کو استعمال کریں گے۔ اس طریقہ کے اندر، ہم ایک متغیر کا اعلان کریں گے۔ یہ متغیر 'char' ڈیٹا کی قسم رکھتا ہے۔ پھر 'cout' کا بیان استعمال کیا جاتا ہے۔ یہ کمانڈ اسکرین پر 'اپنا نام درج کریں' کا متن دکھاتا ہے۔ اس متن کو اسکرین پر ظاہر کرنے کے بعد، صارف کوئی بھی نام درج کرے گا۔ پھر، ہم 'cin' بیان کا استعمال کریں گے۔

یہ کمانڈ صارف سے قدر لیتی ہے۔ فراہم کردہ نام متغیر 'ws' میں محفوظ کیا جائے گا۔ یہاں، ایک بار پھر، ہم 'cin' کمانڈ استعمال کریں گے۔ اس کمانڈ کے اندر، getline() فنکشن لاگو کیا جا رہا ہے۔ اس فنکشن میں پیرامیٹر ہوتا ہے جس میں صارف کا درج کردہ نام اور نام کی لمبائی شامل ہوتی ہے۔ 'cout' کمانڈ صارف کی طرف سے فراہم کردہ نام کو دکھانے کے لیے استعمال کیا جائے گا۔ کوڈ کو ختم کرنے کے لیے، 'return 0' کمانڈ استعمال کی جائے گی۔

نتیجہ

سب سے پہلے، ہم نے اس بارے میں بات کی کہ C++ istream افعال کیا ہیں۔ پھر ہم متعدد افعال اور اہم تعریفوں کا ذکر کرتے ہیں۔ اس آرٹیکل میں، ہم نے مختلف کوڈز چلائے ہیں جن میں istream فنکشنز کی ایک قسم ہے۔ پہلے کوڈ میں، ہم صارف سے کوئی بھی نمبر لیتے ہیں اور اس نمبر کو اسکرین پر ظاہر کرتے ہیں۔ دوسرے میں، صارف نے نام درج کیا اور اسکرین پر اس نام کو پرنٹ کیا۔