کمک در مورد ++c

جهت طرح ابهامات و مشکلات درسی خود به این بخش مراجعه نمایید

مدیر انجمن: rosa_127

قفل شده
asemane.shab
پست: 3
تاریخ عضویت: شنبه 22 خرداد 1389, 12:44 pm

کمک در مورد ++c

پست توسط asemane.shab » شنبه 22 خرداد 1389, 12:54 pm

چرا خروجی برنامه زیر 0050205021 می شود؟ (قبل از عدد 1، یک فاصله وجود دارد
void main()
{char c;
cout<<cin.eof();
while((c=cin.get())!=eof)
cout.put(c);
cout<<c<<cin.eof();
}
لطفا اگه میشه کمک کنید

ابوالفضل
کاربر معمولي
کاربر معمولي
پست: 69
تاریخ عضویت: پنج‌شنبه 6 اسفند 1388, 11:05 pm

Re: کمک در مورد ++c

پست توسط ابوالفضل » یک‌شنبه 23 خرداد 1389, 2:27 am

asemane.shab نوشته شده:چرا خروجی برنامه زیر 0050205021 می شود؟ (قبل از عدد 1، یک فاصله وجود دارد
void main()
{char c;
cout<<cin.eof();
while((c=cin.get())!=eof)
cout.put(c);
cout<<c<<cin.eof();
}
لطفا اگه میشه کمک کنید
دوست عزیز من سوالتون رو متوجه نشدم اگر روشن تر بیان کنید شاید بتونم راهنماییتان کنم :oops: ger:

asemane.shab
پست: 3
تاریخ عضویت: شنبه 22 خرداد 1389, 12:44 pm

Re: کمک در مورد ++c

پست توسط asemane.shab » یک‌شنبه 23 خرداد 1389, 11:52 am

لطفا برنامه زیر را trace کنید krn:
(واسه اینکه کد برنامه رو صحیح ببینید اونو تو یه ویرایشگر مثل notepad کپی کنید) این سوال مربوط به کنکور سراسری سال 88 که خروجی رو 0050205021 داده.
//input: 0502^z//
void main()
{char c;
cout<<cin.eof();
while((c=cin.get())!=eof)
cout.put(c);
cout<<c<<cin.eof();
}
متوجه نشدم چرا 0502 دوبار چاپ شده cuf: :( مرسی از کمکت

ابوالفضل
کاربر معمولي
کاربر معمولي
پست: 69
تاریخ عضویت: پنج‌شنبه 6 اسفند 1388, 11:05 pm

Re: کمک در مورد ++c

پست توسط ابوالفضل » یک‌شنبه 23 خرداد 1389, 1:58 pm

asemane.shab نوشته شده:لطفا برنامه زیر را trace کنید krn:
(واسه اینکه کد برنامه رو صحیح ببینید اونو تو یه ویرایشگر مثل notepad کپی کنید) این سوال مربوط به کنکور سراسری سال 88 که خروجی رو 0050205021 داده.
//input: 0502^z//
void main()
{char c;
cout<<cin.eof();
while((c=cin.get())!=eof)
cout.put(c);
cout<<c<<cin.eof();
}
متوجه نشدم چرا 0502 دوبار چاپ شده cuf: :( مرسی از کمکت
میتونی حل تشریحی سوالات 88 را از این آدرس دریافت کنی، امیدوارم بتونه کمکت کنه.

http://www.asatidiran.ir/news/detail.asp?id=133

اگر باز اشکال داشتی سوال کن امیدوارم بتونم کمکت کنم :oops:

asemane.shab
پست: 3
تاریخ عضویت: شنبه 22 خرداد 1389, 12:44 pm

Re: کمک در مورد ++c

پست توسط asemane.shab » یک‌شنبه 23 خرداد 1389, 6:29 pm

از کمکت ممنون دوست عزیز ولی پاسخ تشریحی نتونست به من کمکی کنه، بصورت خیلی خلاصه وار تشریح کرده :? :(

ابوالفضل
کاربر معمولي
کاربر معمولي
پست: 69
تاریخ عضویت: پنج‌شنبه 6 اسفند 1388, 11:05 pm

Re: کمک در مورد ++c

پست توسط ابوالفضل » دوشنبه 24 خرداد 1389, 12:33 am

asemane.shab نوشته شده:از کمکت ممنون دوست عزیز ولی پاسخ تشریحی نتونست به من کمکی کنه، بصورت خیلی خلاصه وار تشریح کرده :? :(
دوست عریز این یکی از مثالهای فصل 11 کتاب، چگونه با c++ برنامه بنویسیم،دیتل & دیتل، هست.

این برنامه ابتدا مقدار cin.eof() را چاپ میکند، چون cin به پایان فایل نرسیده مقدار 0 معادل false را چاپ میکنه.

در مرحله بعد به دستور cin.get() میرسه چون بافر خالی هست منتظر ورود اطلاعات می ماند.
بعد از وارد کردن یک عبارت مثلا "0502" و زدن کنترل+ z، به عنوان نشان دهنده پایان فایل و در خاتمه با زدن کلید اینتر دستور cin.get() شروع به خواندن تک تک کاراکترها میکند و هر کاراکتر را داخل متغیر c ذخیره میکند سپس با دستور cout.put کاراکتر خوانده شده را چاپ میکند.

این کار تا زمانی که مقدار c مخالف EOF ( یعنی 1-)هست ادامه پیدا میکند، بعد از این که دستور cin.get() به EOF رسید (1-)، مقدار 1- را در c قرار میدهد و c را با EOF که مقدار آن 1- است مقایسه میکند چون شرط نادرست است از حلقه خارج میشود.

در ادامه دستور cout آخر، ابتدا مقدار c (که کاراکتر با کد 1- ذخیره است) را چاپ میکند.(چاپ فاصله)

و در انتها مقدار cin.eof() را چاپ میکند، چون cin به پایان فایل رسیده مقدار 1 معادل true را چاپ میکنه.

بنابراین :
0 اول را برنامه چاپ میکند.
0502 اولی مربوط به کاربر هست.
0502 دومی مربوط به اجرای برنامه هست.

امیدوارم این توضیحات ناقص من بتونه کمکت کنه. :oops:

قفل شده