PDA

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 بذارم .
یعنی مشکلم حل شد . ممنون از دوستان .