ورود

View Full Version : یه سوال خیلی ساده در مورد رشته ها



amir-yeketaz
پنج شنبه 26 آذر 1388, 11:30 صبح
ببخشید یه سوال خیلی ساده داشتم
میشه یک اسم با فاصله با scanf اسکن کرد و بعد چاپش کرد با printf
میدونم که میشه از gets و puts استفاده کرد ولی تو ch ide یه warning میده که میگه :
WARNING: function gets() is dangerous and should not be used, use fgets()
حالا اگه دلیل این وارنینگو بدین ممنون میشم<بیخیالش>
حالا نمیشه با scanf مثلا گرفت amir hosein و بعد همینو پرینت کرد
خودم یه چیزایی میدونم ولی انجام نمیشه
ممنون میشم اگه زودتر جواب سوال ساده منو بدین
خیلی نوکریم

mehdi.mousavi
پنج شنبه 26 آذر 1388, 11:45 صبح
ببخشید یه سوال خیلی ساده داشتم
میشه یک اسم با فاصله با scanf اسکن کرد و بعد چاپش کرد با printf
میدونم که میشه از gets و puts استفاده کرد ولی تو ch ide یه warning میده که میگه :
WARNING: function gets() is dangerous and should not be used, use fgets()
حالا اگه دلیل این وارنینگو بدین ممنون میشم<بیخیالش>
حالا نمیشه با scanf مثلا گرفت amir hosein و بعد همینو پرینت کرد
خودم یه چیزایی میدونم ولی انجام نمیشه
ممنون میشم اگه زودتر جواب سوال ساده منو بدین


سلام.
gets یک تابع deprecated و ناامن هستش، به این دلیله که شما اون پیام رو میگیرید. (برای توضیحات بیشتر به نوشته های Michael Howard و SDL رجوع کنید).

کدی که شما میخواهید اینه، اما توجه کنید که scanf هم deprecated هستش و باید از scanf_s استفاده کنید.

char s[80] = {NULL};
scanf("%s", s);
printf("The input is: %s", s);



برای مشاهده لیست توابع ناامن و منقضی شده در CRT به این سایت رجوع (http://msdn.microsoft.com/en-us/library/ms235384%28VS.80%29.aspx) کنید.

موفق باشید.

amir-yeketaz
پنج شنبه 26 آذر 1388, 12:01 عصر
چرا مساوی با{NULL}شد نفهمیدم
راه دیگه ای وجود نداره

amir-yeketaz
پنج شنبه 26 آذر 1388, 12:03 عصر
بابا اینم که اجرا نشد
یعنی با زدن یه space میره تو پرینت کردنش

mehdi.mousavi
پنج شنبه 26 آذر 1388, 12:34 عصر
بابا اینم که اجرا نشد یعنی با زدن یه space میره تو پرینت کردنش

سلام.
تازه متوجه سوال شدم. ببخشید. تابع scanf کلیه whitespace ها رو ندیده میگیره. اینجا دو راه دارید، یا دونه به دونه کاراکتر ها رو بگیرید و خودتون توی یک حلقه کنترل کنید که مثلا وقتی Enter زده شد، حلقه رو بشکنید و ...

روش دوم استفاده از gets_s هستش:


char s[80] = {NULL};
gets_s(s, sizeof(s) - 1);
printf("The input is: %s", s);


موفق باشید.

پاورقی: چه اصراری به استفاده از scanf هستش؟

amir-yeketaz
پنج شنبه 26 آذر 1388, 13:58 عصر
ببخشید ولی اینم که اجرا نمیشه
میشه برنامه ی کامل استفاده از این نوع اسکنو بفرستین

mehdi.mousavi
جمعه 27 آذر 1388, 12:36 عصر
ببخشید ولی اینم که اجرا نمیشه میشه برنامه ی کامل استفاده از این نوع اسکنو بفرستین

سلام.
شما از چه Compiler ای استفاده می کنید؟