PDA

View Full Version : مشکل در تشخیص کلید space در ورودی



setareh2013
جمعه 16 خرداد 1393, 14:00 عصر
سلام
من باید یک برنامه بنویسم که وقتی کاربر کلید space رو زد چیزی چاپ بشه . مثلا چاپ بشه که کلید فاصله رو زده . مشکل اینه که وقتی این فاصله رو دستی داخل متغیر می نویسم به صورت کد زیر قبول می کنه ولی وقتی با صفحه کلید این دکمه رو فشار میدم تشخیص نمیده که دکمه space زده شده .کسی می تونه راهنماییم کنه ؟
#include <iostream>
#include"conio.h"
using namespace std;
int main ()
{
int b=' ';

cout<<"\n"<<(int)b;
return 0;
}

parvizwpf
جمعه 16 خرداد 1393, 14:26 عصر
#include<conio.h> #include<ctype.h>


int main.....
int ch;


_cputs( "Type 'Y' when finished typing keys: " );
do
{
ch = _getch();
ch = toupper( ch );
} while( ch != ' ' );


_putch( ch );
_putch( '\r' ); /* Carriage return */
_putch( '\n' ); /* Line feed */

motherboard
جمعه 16 خرداد 1393, 14:52 عصر
سلام
من باید یک برنامه بنویسم که وقتی کاربر کلید space رو زد چیزی چاپ بشه . مثلا چاپ بشه که کلید فاصله رو زده . مشکل اینه که وقتی این فاصله رو دستی داخل متغیر می نویسم به صورت کد زیر قبول می کنه ولی وقتی با صفحه کلید این دکمه رو فشار میدم تشخیص نمیده که دکمه space زده شده .کسی می تونه راهنماییم کنه ؟
سلام.اول اینکه شما دیگه کاربر جدید نیستید که کدهاتون رو داخل تگ قرار نمیدید.گذاشتن کد داخل تگ کلهم 1 ثانیه هم زمان نمیبره.من اصلا متوجه کدتون نشدم چون خیلی بد ریخت بود :لبخند:
ولی اون طور که متوجه شدم شما می خواهید که وقتی کلید space زده شد یک پیغامی چاپ بشه.(مثلا چاپ بشه space).به خاطر همین کد زیر رو براتون نوشتم.

#include <conio.h>
#include <stdio.h>
using namespace std;
int main()
{if(scanf("\s"));
printf("space");
getch();}






با تشکر از دوست گرامی parvizwpf (http://barnamenevis.org/member.php?243106-parvizwpf).من کدی رو که در پستتون ارسال کردید رو خیلی متوجه نشدم.و هر کاری کردم نتونستم کامپایل کنم.فکر می کنم برای کدی که دوستمون درخواست کردند خیلی نیاز به این همه کد نویسی نبوده باشه.اگر ممکن است راجع به کدتون توضیح بدهید.با تشکر.

parvizwpf
جمعه 16 خرداد 1393, 15:00 عصر
سلام رضا .آره توضیح میدم. از اونجا که داشتم سرچ میکردم دیدم این کد رو. من جوابام طوریه که سوال کننده رو به جوابش نزدیک کنه. کد هم سرنخی هست برای نردیک کردن سوال کننده که چطور روی تک تک کاراکترها کنترل داشت باشه. شما رفتید سراغ اصل مطلب کاری که من معمولا انجام نمیدم و آدمها رو ترغیب به تحقیق میکنم. بحر حال متشکر از یادآوری.

Salar Moghaddam
جمعه 16 خرداد 1393, 16:41 عصر
سلام رضا! دوستمون گفتن هنگامی که کاربر اسپیس وارد کرد اتفاقی بیافته اما کد شما به شکلیه که وقتی کاربر اسپیت رو وارد کرد بعد اینتر رو زد کد اجرا بشه :)
منم مشتاقم بدونم بهترین روش چجوریه :)

setareh2013
جمعه 16 خرداد 1393, 19:28 عصر
با تشکر از شما
مشکل من اینه که انگار کامپایلر سی پلاس پلاس کد while( ch != ' ' ); رو نادیده می گیره یعنی وقتی من کلید space رو فشار میدم حلقه ی while اجرا نمیشه ولی به جای این فاصله اگر مثلا
while( ch != 'm' ); بگذارم حلقه مشکلی نداره و اجرا میشه .
"s/" هم که می گذارم کلا قبول نمی کنه .

hadi0x7c7
جمعه 16 خرداد 1393, 20:17 عصر
#include <stdio.h>

int main()
{
char c = getch();
if(c == ' ')
puts("Space entered!");
}

motherboard
جمعه 16 خرداد 1393, 21:26 عصر
سلام رضا! دوستمون گفتن هنگامی که کاربر اسپیس وارد کرد اتفاقی بیافته اما کد شما به شکلیه که وقتی کاربر اسپیت رو وارد کرد بعد اینتر رو زد کد اجرا بشه :)
منم مشتاقم بدونم بهترین روش چجوریه :)
من سوالی رو که از جناب parvizwpf (http://barnamenevis.org/member.php?243106-parvizwpf) کردم به صورت کنایه نبود.بلکه واقعا متوجه نشده بودم و می خواستم بدونم.
منظورم از بهترین روش این بود که کد کم تر باشه.ولی با همون نتیجه.البته در مورد ایرادی که گرفتید درست می فرمایید.الان که دوباره تست کردم کد ناقص بود اون هم از جنس چینی :لبخند:
اما کدی که جناب hadi0x7c7 (http://barnamenevis.org/member.php?248784-hadi0x7c7) گذاشتند دقیقا خود خودشه . و البته تعداد دستورات کمی هم داره. و این خودش یک امتیاز هست.