View Full Version : مشکل با استفاده پی در پی از cin.getline
modirmasool
شنبه 25 دی 1389, 21:08 عصر
دوستان برنامه زیر رو در نظر بگیرین:
char a[10];
char b[10];
char c[10];
cin.getline(a,10);
cin.getline(b,10);
cin.getline(c,10);
cout<<"a= "<<a<<"\n b= "<<b<<"\n c= "<<c;
getch();
خوب! حالا اگه ورودی هامون کمتر از 10 کاراکتر باشن هیچ مشکلی پیش نمیاد اما اگه بیایم برای اولی یه ورودی بیشتر از ده حرف بدیم، اونوقت برنامه از روی cin های دوم و سوم میپره و موقع چاپ هم اون دوتا تهی هستن! ممنون میشم راهنماییم کنین که چطور برای ورودی محدودیت بذارم.
با تشکر
Hadirj
شنبه 25 دی 1389, 21:27 عصر
به این صورت بنویسد
cin>>a;
cin>>b;
cin>>c;
modirmasool
شنبه 25 دی 1389, 21:33 عصر
به این صورت بنویسد
cin>>a;
cin>>b;
cin>>c;
ممنون دوست عزیز اما قصد من محدود کردن تعداد کاراکترهای ورودی است تا از خطاهای احتمالی جلوگیری بشه.
sh4mid
شنبه 25 دی 1389, 23:25 عصر
سلام
میشه اینجوری عمل کرد
string GetLimitedString(int limit)
{
string strName;
char chName;
int nCount=0;
do
{
cin.get(chName);
if(!iscntrl(chName))
{
nCount++;
strName+=chName;
}else
{
cin.putback(chName);
break;
}
}while(nCount<limit);
cin.ignore( numeric_limits<int>::max() , '\n' );
return strName;
}
و اینجوری ازش استفاده کرد
string strA=GetLimitedString(4);
میشود کد را بهتر هم کرد (هول هولکی نوشتمش :قهقهه:)
modirmasool
شنبه 25 دی 1389, 23:51 عصر
سلام
میشه اینجوری عمل کرد
string GetLimitedString(int limit)
{
string strName;
char chName;
int nCount=0;
do
{
cin.get(chName);
if(!iscntrl(chName))
{
nCount++;
strName+=chName;
}else
{
cin.putback(chName);
break;
}
}while(nCount<limit);
cin.ignore( numeric_limits<int>::max() , '\n' );
return strName;
}
و اینجوری ازش استفاده کرد
string strA=GetLimitedString(4);
میشود کد را بهتر هم کرد (هول هولکی نوشتمش :قهقهه:)
:گیج: اینم خودش مسئله ای شد! در کل من بیشتر مشکلم با تابع cin.getline هستش که چرا محدودیتش درست کار نمیکنه؟
Hadirj
یک شنبه 26 دی 1389, 09:58 صبح
:گیج: اینم خودش مسئله ای شد! در کل من بیشتر مشکلم با تابع cin.getline هستش که چرا محدودیتش درست کار نمیکنه؟
اتفاقا درست کار میکنه! چون از 10 کاراکتر به بعد رو قبول نمیکنه. الان من نمیتونم کد تست کنم اما خودت تست کن بعد از گرفتن a مقدار b رو null کن و بعد از گرفتن b مقدار c رو! ببین ok میشه
modirmasool
یک شنبه 26 دی 1389, 10:03 صبح
اتفاقا درست کار میکنه! چون از 10 کاراکتر به بعد رو قبول نمیکنه. الان من نمیتونم کد تست کنم اما خودت تست کن بعد از گرفتن a مقدار b رو null کن و بعد از گرفتن b مقدار c رو! ببین ok میشه
چطوری باید نال کنیم؟ من بجاش یه مقدار همینطوری دادم کار نکرد.
Hadirj
یک شنبه 26 دی 1389, 12:09 عصر
cin.getline(a,10);
cin.clear();
cin.ignore(10000,'\n');
cin.getline(b,10);
cin.clear();
cin.ignore(10000,'\n');
cin.getline(c,10);
:چشمک:
modirmasool
یک شنبه 26 دی 1389, 13:08 عصر
cin.getline(a,10);
cin.clear();
cin.ignore(10000,'\n');
cin.getline(b,10);
cin.clear();
cin.ignore(10000,'\n');
cin.getline(c,10);
:چشمک:
یه مشکل جدید!:گریه: این کد درست کار میکنه اما توی همین مثال ما میخوایم سه تا ورودی بگیریم و بعد سه تاشونو چاپ کنیم. مشکل اینجاست که با این کد باید پنج بار داده وارد کنیم تا برسه به مرحله چاپ! اونم اینطوریه که ورودی اول و سوم و پنجم رو در aوbوc قرار میده!
Hadirj
یک شنبه 26 دی 1389, 14:04 عصر
نه! واسه من 3 تا ورودی میگیره!با چی کامپایل میکنی؟
modirmasool
یک شنبه 26 دی 1389, 14:06 عصر
نه! واسه من 3 تا ورودی میگیره؟ با چی کامپایل میکنی؟
با VS 2010
Hadirj
یک شنبه 26 دی 1389, 14:35 عصر
عجیبه! منم با vs2010 کامپایل میکنم اینم result
65149
modirmasool
یک شنبه 26 دی 1389, 14:37 عصر
عجیبه! منم با vs2010 کامپایل میکنم اینم result
65149
فهمیدم! شما یه بار با داده کتر از ده تا امتحان کنین تا اون حالتی که گفتم پیش بیاد.
مثلا:
1
2
3
Hadirj
یک شنبه 26 دی 1389, 15:36 عصر
cin.getline(a,10);
if(a[10] != '\0' && strlen(a)==9)
{
cin.clear();
cin.ignore(10000,'\n');
}
cin.getline(b,10);
if(b[10] != '\0' && strlen(b)==9)
{
cin.clear();
cin.ignore(10000,'\n');
}
cin.getline(c,10);
همین چیزای C هست که من ازش خوشم میاد :گیج:
modirmasool
یک شنبه 26 دی 1389, 15:41 عصر
cin.getline(a,10);
if(a[10] != '\0' && strlen(a)==9)
{
cin.clear();
cin.ignore(10000,'\n');
}
cin.getline(b,10);
if(b[10] != '\0' && strlen(b)==9)
{
cin.clear();
cin.ignore(10000,'\n');
}
cin.getline(c,10);
همین چیزای C هست که من ازش خوشم میاد :گیج:
اینم روشیه!:لبخند: ولی باید راه ساده تری داشته باشه. در عین حال خیلی ممنون از این که وقت گذاشتین. اگه راه بهتری رو پیدا کردین حتما به ما هم اطلاع بدین.
با تشکر
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.