PDA

View Full Version : endl



1485159
چهارشنبه 28 مرداد 1388, 00:05 صبح
میخواستم بدونم که وظیفه این endl چیه؟
اگه تکراریه ببخشید..

Nima_NF
چهارشنبه 28 مرداد 1388, 01:24 صبح
endl همانند n\ به خط بعد می رود به علاوه توضیح زیر که برای یکی دیگر از دوستان گفتم:


endl عمل Flush را انجام می دهد. یعنی فورا محتویات بافر شما (رشته ها و غیره) به خروجی یا فایل ریخته شوند. یعنی هر خطی که endl استفاده می شود باید به خروجی ریخته شود.

در حالت معمولی بدون عمل flush (یعنی مثلا فقط با \n) خود سیستم تشخیص می دهد که چه زمانی بافرها را به خروجی بریزد تا کارآیی سیستم حفظ شود، مثلا در مواقعی چند خط cout را بدون endl به کار می بریم که نیاز نیست خط به خط به خروجی بفرستیم، پس خود سیستم دسته ای از cout های ما را در موقع مناسب یکدفعه به خروجی می فرستد،و بی خودی خط به خط این کار را نمی کند.

rivaaaldo
چهارشنبه 28 مرداد 1388, 01:42 صبح
همون newline هست.

1485159
چهارشنبه 28 مرداد 1388, 13:43 عصر
من ه نفهمیدم...
بافر چیه؟

Nima_NF
چهارشنبه 28 مرداد 1388, 14:13 عصر
ساده ترین نوع ممکن:
هر موقع در هنگام چاپ نوشتیم endl یعنی مکان نما را به خط بعد ببر و دفعه بعد از آنجا شروع به نوشتن در خروجی کن! (به علاوه توضیح پست قبل)
علمی تر آن همان توضیحات قبلی ام.


بافر چیه؟ پاسخ داخل پرانتز بود:

بافر شما (رشته ها و غیره)وقتی یک آرایه ای از کارکترها در نظر می گیرید به اصلاح می گوییم بافر.



cout << "line 1" << endl;
cout << "line 2" ;

R.O.O.T.S
چهارشنبه 28 مرداد 1388, 14:19 عصر
بافر یک حافظه ی موقته که برای تسریع در انجام کارها ستفاده می شه.

endl عمل Flush را انجام می دهد. یعنی فورا محتویات بافر شما (رشته ها و غیره) به خروجی یا فایل ریخته شوند. یعنی هر خطی که endl استفاده می شود باید به خروجی ریخته شود.این چیزیه که می خوایی. در اصل endl بافر را خالی می کنه و همه چیز تا قبل از endl را به خروجی می ریزه(به صورت اجباری)

ولی \n دست خود سیستم است و هر وقت صلاح بدونه اطلاعات را به خروجی می ریزه.

endl:ریختن اطلاعات به خروجی به صورت اجباری توسط برنامه نویس.
\n:اختیارش دست خود سیستم است و هر وقت بخواد اطلاعات را به خروجی میریزه.

البته این زبان خودمونیه(حالا کارشون را قاطی نکنی)

پاورقی:قاطی کردم، پست قبلیم همین بود.

1485159
چهارشنبه 28 مرداد 1388, 14:30 عصر
هر موقع در هنگام چاپ نوشتیم endl یعنی مکان نما را به خط بعد ببر و دفعه بعد از آنجا شروع به نوشتن در خروجی کن! (به علاوه توضیح پست قبل)


مگه \n هم همون کارو نمیکنه؟

R.O.O.T.S
چهارشنبه 28 مرداد 1388, 14:52 عصر
مگه پست منو نخوندی مهندس

ولی \n دست خود سیستم است و هر وقت صلاح بدونه اطلاعات را به خروجی می ریزه.

1485159
چهارشنبه 28 مرداد 1388, 15:05 عصر
ولی \n دست خود سیستم است و هر وقت صلاح بدونه اطلاعات را به خروجی می ریزه.
خوب این یعنی چی؟

R.O.O.T.S
چهارشنبه 28 مرداد 1388, 17:32 عصر
مگه endl در اصل عمل flush را انجام نمی داد.یعنی هر وقت برنامه به این قسمت می رسید اطلاعات را به خروجی می ریخت(به صورت اجباری) ، تا اینجا اوکی؟
خوب حالا \n هم همون کار را می کنه اما بر خلاف endl اطلاعات وقتی که خود برنامه بخواد(برای بهینه سازی) در خروجی ریخته می شه.

کمی روی جملات گفته شده در این تایپیک متمرکز بشو تا معنی اصلی را بگیری.

موفق باشی

1485159
چهارشنبه 28 مرداد 1388, 19:28 عصر
خوب حالا \n هم همون کار را می کنه اما بر خلاف endl اطلاعات وقتی که خود برنامه بخواد(برای بهینه سازی) در خروجی ریخته می شه.

یعنی چی زمانی که برنامه بخواد؟

R.O.O.T.S
چهارشنبه 28 مرداد 1388, 20:53 عصر
والا من دیگه بلد نیستم فارسی را به فارسی ترجمه کنم اگه چیزی سراغ داری که این کارو می کنه منو بی خبر نذار.(میشه سنتون را بپرسم؟)

نکته:کاربرای این سایت همیشه چیزای ساده را پیچیده می کنند؟

emadfa
چهارشنبه 28 مرداد 1388, 22:03 عصر
دوست عزیز سلام
نیما خیلی خیلی قشنگ توضیح داد! در واقع هم endl و هم \n خروجی را به خط بعد می فرستند. با یک تفاوت و آن این که endl رشته هایی که هنوز به خروجی فرستاده نشده اند را اجبارا به خروجی می فرستد. دلیل این که شما متوجه نشدید احتمالا اینه: در ++C رشته ها خط به خط به خروجی فرستاده نمی شوند بلکه مجموعا زمانی که سیستم تصمیم بگیرد به خروجی فرستاده می شود. با استفاده از تابع endl شما به سیستم می گویید که اگر بافری در حافظه هست آنها را به خروجی بفرست. ممکن است بپرسید خب کاربرد این مساله چیست. در برنامه نویسی دستوراتی به نام prompt وجود دارند که البته جز مفاهیم برنامه نویسی نیستند بلکه جز مفاهیم رابط کاربری هستند. مثلا متن خروجی "یک عدد را وارد کن:" یک دستور prompt است. ان گونه مواقع شما بهتر است که از دستور endl استفاده کنید چون احتمال دارد که دستور شما به موقع به کاربر نرسد ( که معمولا این گونه نیست ) بنابراین در حالت کلی از n\ استفاده کنید و در حالت های خاص از این دستور استفاده کنید.

1485159
چهارشنبه 28 مرداد 1388, 22:56 عصر
"میشه سنتون را بپرسم؟"مخلص شما 15 سال دارم..

1485159
چهارشنبه 28 مرداد 1388, 23:15 عصر
cin.ignore() به چه دردی میخوره؟

clover
پنج شنبه 29 مرداد 1388, 00:14 صبح
cin.ingore() به چه دردی میخوره؟

باعث میشه که کاراکتر های ورودی نادیده گرفته بشن . مثلا شماره ای که به صورت xxx-xxxx وارد میشه و شما نمی خواهید کاراکتر "-" را از ورودی بگیرید ، کاربر این کاراکتر را وارد میکنه اما شما اونو نادیده می گیرید .

برای من هم جالب بود بدونم چند سالتونه ، البته قصد جسارت ندارم اما بیشتر مطالبی که می پرسید در کتاب های پایه ی ++C در موردشون توضیح داده شده . در مورد I/O به صورت مفصل در کتاب قدیمی دایتل ( ویرایش دوم ) توضیح داده شده .
مطالعه ی یه کتاب مرجع ++C را بهتون پیشنهاد می کنم .

1485159
پنج شنبه 29 مرداد 1388, 00:18 صبح
یعنی اگه بنویسیم cin.ignore('-'( کاراکتر- نادیده گرفته میشه؟

clover
پنج شنبه 29 مرداد 1388, 01:31 صبح
یعنی اگه بنویسیم cin.ignore('-'( کاراکتر- نادیده گرفته میشه؟

این تابع دو پارامتر دارد . پارامتر اول یک عدد هست که تعداد کاراکتر هایی که باید نادیده گرفته شوند را تعیین می کند . پارامتر دوم یک کاراکتر هست که اگر قبل از رسیدن به تعداد مورد نظر ظاهر شود تابع پایان می یابد .
به مثال زیر دقت کنید :

// basic_istream_ignore.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
using namespace std;
char chararray[10];
cout << "Type 'abcdef': ";
cin.ignore( 5, 'c' );
cin >> chararray;
cout << chararray;
}

با ورودی های مختلف تست کنید تا با طرز کار تابع آشنا بشید .

R.O.O.T.S
پنج شنبه 29 مرداد 1388, 10:12 صبح
"میشه سنتون را بپرسم؟"مخلص شما 15 سال دارم..
خوب الان بهتر می شه راهنمایی کرد،هرکسی را باید با زبان خودش باهاش حرف زد.

ببین اصلن نیاز نیست قاطی کنی یا وارد جزئیات بشی(فعلن نیاز نیست)

endl و \n هر دو شون یک کار را می کنند ،یعنی پایان خط تنها فرقی که دارند این است وقتی برنامه(شما فکر کن همون ویندوز خودمون) به endl می رسه اطلاعات را روی هارد(همون خروجی) می نویسیه حالا می خواد ویندوز در گیر هر کار دیگه ای باشه،حالا وقتی ویندوز به \n می رسه ،اگه کاری نداشت یا درگیر انجام کار دیگه ای نبود اطلاعات را روی هارد می نویسه

سعی کردم کمی معانی و مفاهیم پیچیده را برات حذف کنم تا راحت تر جریان دستگیرت بشه.

پیشنهاد:زیاد خودت را قاطی مفاهیم نکن،فعلن فقط کد بزن.

1485159
پنج شنبه 29 مرداد 1388, 21:41 عصر
خوب پس به نظرم بهتره که از endl استفاده کنیم تا اطلاعات به موقع چاپ بشه.
ممنون.
مشکلم حل شد.