ورود

View Full Version : cin.getline



kitten
دوشنبه 03 دی 1386, 18:46 عصر
سلام دوستان
وقتی از دستورات زیر استفاده می کنم برنامه کاراکتر را نمی گیرد چهکار باید بکنم لطفا دلیل این که نمی گیرد را هم ذگر کنید؟

char ha[21];
cout<<hshshshsh;

cin.getline(ha,20);

emad_67
دوشنبه 03 دی 1386, 21:33 عصر
این الان یعنی چی؟


cout<<hshshshsh;

اینجوری بنویس مشکلی پیش نمیاد:


char ha[21];
cin.getline(ha,20);
cout<<ha;

max_15s
سه شنبه 04 دی 1386, 11:46 صبح
البته دقیق نمی دونم ، اما من مشکلی مشابه داشتم مثلا

int a;
char s[200];
cin>>a;
cin.getline(s, 200);توی این کد برای s مقداری نمی گیره و رد می شه . من همیشه بعد از اینکه متغییر هامو با cin گرفتم و حالا می خوام یک getline داشته باشم ، قبلش یک getline می گذارم که از روش رد می شه اما getline دوم رو مقدار می گیره . نمی دونم چرا اینطوریه (شاید مثل read توی پاسکال باشه)


int a;
char s[200];
cin>>a;
cin.getline(s, 200);
cin.getline(s, 200);
cout<<s<<" is "<<a<<endl;کد بالا برای s مقدار می گیره

emad_67
سه شنبه 04 دی 1386, 15:12 عصر
توی این کد برای s مقداری نمی گیره و رد می شه . من همیشه بعد از اینکه متغییر هامو با cin گرفتم و حالا می خوام یک getline داشته باشم ، قبلش یک getline می گذارم که از روش رد می شه اما getline دوم رو مقدار می گیره . نمی دونم چرا اینطوریه (شاید مثل read توی پاسکال باشه)
علت اینکه این مشکل به وجود میاد اینه که cin همیشه جریان ورودی رو فقط تا سر enter میخونه یعنی وقتی شما مینویسی:


int a;
char s[200];
cin>>a;
cin.getline(s, 200);
و حالا وقتی مثلا در ورودی 123 رو وارد میکنی، مقدار 123 توسط cin>>a خونده میشه ودر متغیر a ذخیره میشه ولی در حالی که شما بعد از 123 یک enter هم زدی یعنی در اصل جریان ورودی به صورت زیر بوده:


123"\n"
و بعد از اینکه 123 خونده شد چون "n\" هنوز در ورودی باقی مونده توسط خط بعد که cin.getline قرار داره خونده میشه و در آرایه s قرار میگیره که شما فکر میکنید از روی این خط رد شده. حتی اگه خروجی دستور زیر:


int a;
char s[200];
cin>>a;
cin.getline(s, 200);
cout<<s<<endl;
در خروجی یک خط به صورت خالی ایجاد میشه که همون "n\" هست که در آرایه ذخیره شده.
بنابراین منطقی تر اینه که برای جلوگیری از این مشکل از cin.ignore استفاده کنیم که "n\" از جریان خارج بشه یعنی به این صورت:


int a;
char s[200];
cin>>a;
cin.ignore();
cin.getline(s, 200);
cout<<s<<endl;