PDA

View Full Version : سوال: مشکل با ()cin.get



هم دانشگاهی
چهارشنبه 29 دی 1389, 07:41 صبح
سلام !

من داخل برنامم از () cin.get استفاده کردم اما نمیدونم چرا بدون اینکه اجرا بشه میره سراغ مراحل بعدی !

حتی () cin.get خالی هم قبل و بعدش گذاشتم اما توفیقی نکرد !

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

mehdi.mousavi
چهارشنبه 29 دی 1389, 11:03 صبح
سلام ! من داخل برنامم از () cin.get استفاده کردم اما نمیدونم چرا بدون اینکه اجرا بشه میره سراغ مراحل بعدی ! حتی () cin.get خالی هم قبل و بعدش گذاشتم اما توفیقی نکرد ! کسی میدونه باید چی کار کنم ؟!؟!

سلام.
کد زیر رو در نظر بگیرید:


char a;
cin.get(a);
cout << a;فرض کنیم کد فوق رو اجرا کنیم و بعنوان ورودی اعداد 123 و سپس کلید Enter رو بزنیم. بدین ترتیب a برابر یک (یا کد اسکی 49) میشه. حالا فرض کنید توی کدمون چند تا get دیگه هم داریم (بعد از خط آخر برنامه فوق). بدین ترتیب، get های بعدی، به ترتیب (بدون اینکه از شما مجددا ورودی بخوان)، اعداد 2، سپس 3 و در نهایت 10 (یعنی کلید Enter) رو به شما بعنوان ورودی برمیگردونه. یعنی شما یکبار 123 نوشتید و Enter زدید، اما cin.get فقط یک کاراکتر رو داره تو ورودی میخونه و Whitespace ها رو هم نادیده نمیگیره... اما وقتی 10 رو بهتون برگردوند، اونوقت get بعدی چون به End of Stream رسیده، مجددا منتظر گرفتن ورودی از شما میمونه. قاعدتا مشکل کد شما هم همینه. برای رفع مشکل جای get از << Operator استفاده کنید.

موفق باشید.

هم دانشگاهی
چهارشنبه 29 دی 1389, 18:58 عصر
خب ولی مشکل <<operator اینه که فاصله رو هم به عنوان کارکتر انتها رشته در نظر میگیری !!!

رشته ای که من می خوام ازش استفاده کنم دارای فاصله هستش !

ghasemweb
پنج شنبه 30 دی 1389, 00:09 صبح
بگيد قضيه چيه شايد ما هم نظري داشتيم

هم دانشگاهی
پنج شنبه 30 دی 1389, 11:10 صبح
آنچه عیان است چه حاجت به بیان است

عزیزم خب کل تاپیک رو بخون دیگه !!!!!!!! :قهقهه:

هم دانشگاهی
پنج شنبه 30 دی 1389, 19:09 عصر
دوستان خواهش میکنم اگه میدونید علت چیه که ()cin.get کار نمیکنه بگید لازم دارم !

ghasemweb
پنج شنبه 30 دی 1389, 19:42 عصر
آنچه عیان است چه حاجت به بیان است

عزیزم خب کل تاپیک رو بخون دیگه !!!!!!!! :قهقهه:

باور كن منظورت رو نگرفتم

ميشه تكه كدي كه داري بذاري شايد بگيرم چي ميگي

هم دانشگاهی
پنج شنبه 30 دی 1389, 20:36 عصر
نگاه کن این کدم :


void writeToStatementFile() // write to statement file
{
//system("color 70");
char n,name[100];
ofstream f1("Statement");
if(!f1)
{
cout<<"File can NOT open !";
getch();
exit(0);
}
cout<<"Enter Statement: \n";
cin.get(name,99);
f1<<name;
f1.close();
}

این تابع برای بار اول اجرا میشه اما سری بعد بدون اینکه ()cin.get رو بگیره میره سراغ دستور بعد !

واقعا نمیدوتم مشکلش چیه !!!

هم دانشگاهی
جمعه 01 بهمن 1389, 06:26 صبح
تو رو خدا . . . :گریه::ناراحت:


سلام.
کد زیر رو در نظر بگیرید:


کد:
char a;cin.get(a);cout << a;
فرض کنیم کد فوق رو اجرا کنیم و بعنوان ورودی اعداد 123 و سپس کلید Enter رو بزنیم. بدین ترتیب a برابر یک (یا کد اسکی 49) میشه. حالا فرض کنید توی کدمون چند تا get دیگه هم داریم (بعد از خط آخر برنامه فوق). بدین ترتیب، get های بعدی، به ترتیب (بدون اینکه از شما مجددا ورودی بخوان)، اعداد 2، سپس 3 و در نهایت 10 (یعنی کلید Enter) رو به شما بعنوان ورودی برمیگردونه. یعنی شما یکبار 123 نوشتید و Enter زدید، اما cin.get فقط یک کاراکتر رو داره تو ورودی میخونه و Whitespace ها رو هم نادیده نمیگیره... اما وقتی 10 رو بهتون برگردوند، اونوقت get بعدی چون به End of Stream رسیده، مجددا منتظر گرفتن ورودی از شما میمونه. قاعدتا مشکل کد شما هم همینه. برای رفع مشکل جای get از << Operator استفاده کنید.

موفق باشید.

خب حالا نمیشه کاری کرد که اون اطلاعات قبلی پاک بشه ؟! یا مثلا بافر خالی ببشه ؟!

ghasemweb
جمعه 01 بهمن 1389, 10:07 صبح
كدي كه شما نوشتيد يك متن رو از كاربر دريافت ميكنه و دقيقا همونو تو فايل Statement مي نويسه ولي من نفهميدم مشكلش چيه مگه غير از اين ميخواي باشه ؟

هم دانشگاهی
جمعه 01 بهمن 1389, 10:26 صبح
نگاه کن این تابع تو یه حلقه هست و دفعه اول اجرا میشه اما دفعه بعد اجرا نمیشه !!!

ghasemweb
جمعه 01 بهمن 1389, 13:16 عصر
يعني اين تابع رو تو حلقه مدام فراخوني ميكني تا رشته اي به فايل اضافه كني؟

هم دانشگاهی
شنبه 02 بهمن 1389, 12:30 عصر
به هر حال بازهم از همه ممنونم!

از ()gets استفاده کردم مشکلم حل شد !!! :شیطان: :کف: :لبخند: