صفحه 1 از 1

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

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

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:

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

ارسال شده: یک‌شنبه 23 خرداد 1389, 11:52 am
توسط 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: :( مرسی از کمکت

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:

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

ارسال شده: یک‌شنبه 23 خرداد 1389, 6:29 pm
توسط asemane.shab
از کمکت ممنون دوست عزیز ولی پاسخ تشریحی نتونست به من کمکی کنه، بصورت خیلی خلاصه وار تشریح کرده :? :(

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: