PDA

View Full Version : سوال: کد زیر چرا با زدن هر کلیدی از حلقه خارج می شه ؟؟؟؟



bahar1370
جمعه 04 شهریور 1390, 15:23 عصر
char c;
do
cout<<"continue\n";
while(((c=cin.get())=='n'));

کسی نمی دونه چرا؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

tdkhakpur
شنبه 05 شهریور 1390, 00:17 صبح
خب برای اینکه شرط درست در نمیاد تا بتونه دور بزنه.
برای اینکه cpu به اون خطی برسه که شرط while رو درش قرار دادید لازمه که بعد از وارد کردن هر کلیدی اینتر را هم بزنید. اگر میخواهید با وارد کردن یک کاراکتر از حلقه خارج بشید
از getch استفاده کنید

vcldeveloper
شنبه 05 شهریور 1390, 03:44 صبح
کسی نمی دونه چرا؟
به خاطر استفاده از تابع get. تابع get در هر بار فراخوانی یک کارکتر را از استریم ورودی میخونه و به شما تحویل میده. برای خواندن از استریم ورودی هم، اگر استریم ورودی خالی باشه، منتظر میمونه تا کاربر استریم رو با یک کارکتر اسکی 10 (توسط کلید Enter ارسال میشه) خاتمه بده. حالا شما یک کارکتر (مثلا b) وارد می کنید، کلید Enter هم می زنید؛ این کار باعث میشه که عملا سه کارکتر در بافر ورودی ثبت بشه: کارکتر b، کارکتر با کد 10، و کارکتر با کد 13. دو کارکتر آخر توسط کلید Enter ارسال شدند. حالا تابع get میاد اولین کارکتر موجود در بافر رو به شما برگشت میده، که میشه کارکتر b. کارکتر b با کارکتر n مساوی نیست، پس حلقه ادامه پیدا نمیکنه.
اما اگر به جای کارکتر b، کارکتر n وارد کنید، چه اتفاقی میافته؟ تابع n اولین کارکتر موجود در بافر را برگشت میده، n = n؛ پس حلقه ادامه پیدا میکنه. بافر خالی نیست، پس تابع get منتظر ورود کارکتر جدید از طرف شما نمیشه، بلکه این بار دومین کارکتر موجود در بافر را برگشت میده. دومین کارکتر، کارکتر با کد اسکی 10 هست که مساوی n نیست، پس حلقه باز هم به پایان میرسه.

ehp_kz6597
شنبه 05 شهریور 1390, 06:31 صبح
البته شما با تغییر علامت == به =! میتونی جواب صحیح رو دریافت کنی

mrsajjad
شنبه 05 شهریور 1390, 15:20 عصر
سلام دوست عزيز .
1 - در C‌نيازي به نوشتن Do‌نيست
2 - با گذاشتن ; حلقه فقط يکبار انجام مي شود