PDA

View Full Version : آموزش نحوه گرفتن رشته هایی که با spase جدا شده اند



رامین مرادی
دوشنبه 04 اردیبهشت 1391, 11:16 صبح
با عرض سلام خدمت دوستان عزيز
در اين قسمت مي خوام آموزش گرفتن رشته هاي دوتكه مانند نام و نام خانوادگي و ذخيره اونها در يك متغيير رو آموزش بدم. البته به وفور دیدم تو برنامه ها که این مسئله رو پیش بینی نکردن مانند برنامه gradbook که ماه پیش رو سایت گذاشته بودن.:متفکر:
البته ديدم دوستاي ديگه مثلا" مي ان و با حلقه و ... اين كارو انجام مي دن :متفکر:ولي سي ++ خودش اين امكان رو ميده البته با استفاده از يك تابع مثال پايين رو در نظر بگيريد.

Cout<<”Enter age”;
Cin>>age;
Cout<<”Enter name ”;
Cin.get(name,size of array);

خوب در اين كد ابتدا از شما يك عدد مي گيره و يك رشته چاپ مي شه ولي تابع cin.get كه يك رشته رو از شما قبول مي كنه به سايز آرايتون اما اين تابع يك مشكل ايجاد مي كنه اونم اينه كه وقتي شما در چاپ قبل از گرفتن رشته يعني خط 3 علامت \n رو قرار داديد و اين كاركتر در بافر ورودي قرار مي گيرد و وقتي خط 4 اجرا ميشه ابتدا بافر شما رو مي خونه و با ديدن علامت خط جديد فرض مي كنه كه شما رشته اي رو وارد كرديد و از شما رشته اي نمي گيره و خط بعدي اجرا ميشه براي حل اين مشكل يك تابع در نظر گرفته شده كه در مثال زير نشان مي دهيم.

Cout<<”Enter age”;
Cin>>age;
Cout<<”Enter name ”;
Cin.ignore(10,’\n’);
Cin.get(name,size of array);

توضيح :
خوب مي بينيد كه قبل از گرفتن كاركتر يك تابع اضافه كرديم نحوه كار بدين صورت است كه اين تابع (خط 4) ابتدا بافر شما رو بررسي مي كنه البته به دو صورت كه از ابتدا تا 10 كاركتر رو مي خونه و رد مي كنه و يا با رسيدن به كاركتر خط جديد عمل خواندن رو قطع مي كنه .تا بتونيد رشته دو تكه اي رو بخونيد.
البته دوستان من اين تابع رو در توربو سي تسيت كردم و جواب گرفتم با ساير كامپايلر ها تستش نكردم. در ضمن اين تابع در هدر فايل iostream.h قرار داره.
اميدوارم اين آموزش براتون مفيد واقع شده باشه.