قالب بندی خروجی
وقتی عددی نمايش داده می شود صفات زير مورد نظر است:
• مقدار فضای مورد نياز برای عدد روی صفحه
• چپ چين يا راست چين بودن ( اعداد تمايل به راست چين دارند)
• تعداد ارقام اعشار
• علامت برای اعداد منفی
• نمای علمی برای اعداد بزرگ
اين صفات توسط شئ cout و توابع کتابخانهiomanip قابل تنظيم هستند.
در C با استفاده از فرامين فرمت مانند %d در تابع printf() قادر به فرمت بندی خروجی هستيم. در C++ فرمت بندی خروجی به طريق متفاوتی از طريق اضافه کردن دستکاری کننده ها (manipulators) به جريان خروجی انجام می گيرد.
manipulator تابعی است که می تواند خصوصيات جريان خروجی را تغيير بدهد. manipulator می توانند به جريان های ورودی يا خروجی اضافه شوند.
مثال.endl خط را تمام می کند و خط جديد را شروع می کند.
cout << endl;
cout << "Some Text" << endl << endl; // Two blank lines
تابع به صورت زير هم می تواند استفاده شود.
endl(cout);
کلاس ostream که برای خروجی استفاده می شود خود از کلاس ios مشتق شده است که از ios_base گرفته شده است. کلاس اخير توابع عمومی را برای دستکاری کننده ها تعريف می کند.
کلاس iostream از ostream و istream ارث بری دارد بنابراين مثال های cout می توانند iostream را استفاده کنند.
انواع دستکاری کننده ها
اکثر دستکاری کننده ها در
دستکاری کننده های کتابخانه
• endl – خط را خاتمه داده و flush را صدا می زند.
• ends – کاراکتر ' ' (NULL) را در جريان درج می کند.
• flush – بافر را بلافاصله به خروجی می فرستد.
دستکاری کننده های کتابخانه
• boolalpha – درج يا استخراج اشيای بولين مانند.
• noboolalpha – درج يا استخراج اشيای بولين مانند مقادير درست و غلط.
• fixed – درج مقادير مميزشناور در فرمت ثابت.
• scientific – درج مقادير مميزشناور در فرمت علمی.
• internal – وسط چين
• left – چپ چين
• right – راست چين
• dec – درج يا استخراج مقادير صحيح در فرمت دهدهی.
• hex – درج يا استخراج مقادير صحيح در فرمت هگز.
• oct – درج يا استخراج مقادير صحيح در فرمت اکتال.
• showbase – مبنای مقدار را پيشوند آن می کند.
• noshowbase – مبنای مقدار را پيشوند نمی کند.
• showpoint – هميشه نقطه اعشار را هنگام درج مقدار اعشار نمايش می دهد.
• noshowpoint – نقطه اعشار را اگر لازم نيست نمايش نمی دهد.
• showpos – اگر عدد مثبت است علامت بعلاوه (+) را درج می کند.
• noshowpos – اگر عدد مثبت است علامت بعلاوه (+) را درج نمی کند.
• skipws – از روی فاصله ها می پرد.
• noskipws – از روی فاصله ها نمی پرد.
• uppercase – حروف کوچک را با حروف بزرگ جايگزين می کند. تنها روی خروجی توليد شده مانند اعداد هگز تاثير دارد.
• nouppercase – حروف کوچک را با حروف بزرگ جايگزين نمی کند.اکثر اين دستکاری کننده ها يک بيت در فلگ را تنظيم می کنند. يک فلگ مقداری است که برای تعيين يک سری از کارها استعمال می شود. فلگ ها معمولا مقادير صحيح هستند اما اغلب دارای يک نام يا برچسب هستند تا اين مقدار خواناتر باشد.
تنظيم فلگ مستقيما توسط ()cout.setf قابل انجام است و توسط ()cout.unsetf خنثی می شود. اين توابع متعلق به کتابخانه
هستند. تابع setf به دو صورت می تواند استفاده شود:
setf( flagvalues);
setf( flagvalues, maskvalues);
unsetf( flagvalues);
مثال. برای قالب بندی خروجی به صورت scientific، uppercase و boolalpha پارامترها برای تنظيم بيت ها به صورت زير ارسال می شود:
cout.setf( ios_base::scientific | ios_base::uppercase | ios_base::boolalpha) ;
cout << hex << endl;
cout << 1234 << endl;
cout << dec << endl;
cout << 123400003744.98765 << endl;
bool value=true;
cout << value << endl;
cout.unsetf( ios_base::boolalpha) ;
cout << value << endl;خروجی به صورت زير توليد می شود:
4D2
1.234000E+011
true
1
هر کاراکتری را می توان توسط casting به خروجی ارسال کرد. برای مثال Char(27) کاراکتر escape را ارسال می کند.
اگر دو ثابت رشته در جوار هم باشند و بين آنها علامتی نباشد کامپايلر دو رشته را بهم می چسباند.
مثال.
#include <iostream>
int main()
{
cout << "This is far too long to put on a "
"single line but it can be broken up with "
"no ill effectsnas long as there is no "
"punctuation separating adjacent character "
"arrays.n";
return 0;
}
• unitbuf – بافر را بعد از درج خالی می کند.
• nounitbuf – با را بعد از هر درج خالی نمی کند.