View Full Version : مشکل در گرفتن ورودی string
Altech
چهارشنبه 27 آبان 1388, 18:12 عصر
سلام .
من وقتی می خوام یه ورودی string توسط تابع getline از کاربر بگیرم ، اگه اول ورودی space باشه اونو ثبت نمی کنه و از اولین کاراکتر غیر space به بعد تو متغیر ذخیره می کنه . ولی وسط رشته تو گرفتن space مشکلی نداره . چطوری می تونم این مشکلو حل کنم ؟
m.soleimani
چهارشنبه 27 آبان 1388, 18:49 عصر
سلام .
من وقتی می خوام یه ورودی string توسط تابع getline از کاربر بگیرم ، اگه اول ورودی space باشه اونو ثبت نمی کنه و از اولین کاراکتر غیر space به بعد تو متغیر ذخیره می کنه . ولی وسط رشته تو گرفتن space مشکلی نداره . چطوری می تونم این مشکلو حل کنم ؟
از تابع gets استفاده کنید موفق باشید.
m.soleimani
چهارشنبه 27 آبان 1388, 18:56 عصر
یه مثال برای تابع gets امیدوارم که به کارتون بیاد.
#include <stdio.h>
int main()
{
char string [256];
printf ("Insert your full address: ");
gets (string);
printf ("Your address is: %s\n",string);
return 0;
}
Altech
چهارشنبه 27 آبان 1388, 20:46 عصر
آخه gets که نمی تونه string بگیره . اون * char می گیره .
m.soleimani
چهارشنبه 27 آبان 1388, 21:19 عصر
آخه gets که نمی تونه string بگیره . اون * char می گیره .
دوست عزیز منظور از اون string فقط نام دادن به آرایمون بوده میشد به سبک زیر نوشت :
#include <stdio.h>
int main()
{
char name [25];
printf ("Insert your full address: ");
gets (name);
printf ("Your address is: %s\n",name);
return 0;
}
در ضمن string یعنی رشته و * char هم یعنی اشارهگر به یه رشته و نام یه آرایه هم که از نوع char باشه را میشه به تابع gets پاس کرد چون معنی همون * char را میده موفق باشید.
Altech
چهارشنبه 27 آبان 1388, 21:23 عصر
دوست عزیز همه این ها رو من می دونم . منظور من از string همون آبجکتی هست که از کتابخانه استاندارد STL نمونه سازی می شه . از هدر <string> .
Marjan_Bala
چهارشنبه 27 آبان 1388, 22:25 عصر
سلام .
من وقتی می خوام یه ورودی string توسط تابع getline از کاربر بگیرم ، اگه اول ورودی space باشه اونو ثبت نمی کنه و از اولین کاراکتر غیر space به بعد تو متغیر ذخیره می کنه . ولی وسط رشته تو گرفتن space مشکلی نداره . چطوری می تونم این مشکلو حل کنم ؟
من تا حالا به این نکته توجه نکرده بودم ، من وقتی با cin یه متغیر string رو از کاربر مقداردهی میکنم اگه اول یا آخر رشته space بزنه در نظر نمیگیره وسطش اگه بزنه به عنوان جداکننده در نظر میگیره و دو تا متغیر string رو مقداردهی میکنه.دوست عزیز ببخشید با getline چجوری مقداردهی کرید متغیرتونو؟(ببخشید که سوالو با سوال جواب دادم!)
Altech
چهارشنبه 27 آبان 1388, 23:18 عصر
من تا حالا به این نکته توجه نکرده بودم ، من وقتی با cin یه متغیر string رو از کاربر مقداردهی میکنم اگه اول یا آخر رشته space بزنه در نظر نمیگیره وسطش اگه بزنه به عنوان جداکننده در نظر میگیره و دو تا متغیر string رو مقداردهی میکنه.دوست عزیز ببخشید با getline چجوری مقداردهی کرید متغیرتونو؟(ببخشید که سوالو با سوال جواب دادم!)
می نویسین :
string str;
getline ( cin, str );
Marjan_Bala
چهارشنبه 27 آبان 1388, 23:37 عصر
دوست عزیز من از همین روشی که خودتون گفتین برا مقداردهی استفاده کردم ، جواب میده! spaceهای اولشم در نظر میگیره.
ممنون!
Altech
پنج شنبه 28 آبان 1388, 10:20 صبح
نه مشکل من این بود که اگه قبلش توسط دستور cin یه عددی گرفته میشد ، طبیعتا باید یدونه Enter زده می شد . در این صورت n\ به بافر می رفت و برای دستور getline بعدی استفاده می شد و باعث می شد که این دستور فکر کند که یک رشته خالی وارد شده است . من برای حل این مشکل قبلش از دستور cin >> ws استفاده کردم که اون باعث می شد از white space های اول صرفنظر کنه . بالاخره به این نتیجه رسیدم که می تونم قبل از getline یدونه cin.ignore بذارم .
یعنی مشکلم حل شد . ممنون از دوستان .
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.