چون خودم یه مدتی به خاطر این قضیه رفته بودم سر کار این رو اینجا میزارم
همونطور که میدونید (شاید هم ندونید ) gcc که getch() نداره (خودش خبر نداره)
پس باید یه کار دیگه کرد. تابع زیر کار getch() رو میکنه:
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
using namespace std;
int mygetch( )
{
struct termios oldt,newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}
حالا بریم سراغ دکمه های جهت. "همونطور که میدونید (شاید هم ندونید )" این دکمه ها شامل چندتا کرکتر هستند. توی ویندوز دوتایی ولی توی لینوکس تا چهارتا هم داره. جدول زیر رو برای راحتی کار نوشتم:
ASCII code for some key in linux:
-------------------------------------
left arrow = 1-27 , 2-91 , 3-68
right arrow = 1-27 , 2-91 , 3-67
up arrow = 1-27 , 2-91 , 3-65
down arrow = 1-27 , 2-91 , 3-66
-------------------------------------
home key = 1-27 , 2-79 , 3-72
end key = 1-27 , 2-79 , 3-70
-------------------------------------
page UP = 1-27 , 2-91 , 3-53 , 4-126
page DOWN = 1-27 , 2-91 , 3-54 , 4-126
-------------------------------------
del key = 1-27 , 2-91 , 3-51 , 4-126
ins key = 1-27 , 2-91 , 3-50 , 4-126
-------------------------------------
که ۱ و ۲ و ۳ و ۴ ها همون کرکتر ها به ترتیب هستند. اگه میخوای موضوع بیشتر برات جا بیفته این کد رو اجرا کن:
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <iostream>
using namespace std;
int mygetch( )
{
struct termios oldt,newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}
int main()
{
int i=-1 ;
while(i++)
{
char ch;
ch=mygetch();
cout<<i<<"- "<<(int)ch<<endl;
i++;
ch=mygetch();
cout<<i<<"- "<<(int)ch<<endl;
}
return 0;
}
راستی یادتون نره که نباید با اکلیپس اجراش کنید چون که دلیلش رو خودتون میفهمید. باید از توی ترمینال اجراش کنید.
تذکرات: اگه کسی سر در میاره اون تابع رو توضیح بده(لطفا)
از آقای خزاعی هم به خاطر کمک هایی که کردند تشکر میکنم.
منابع: یادم نمیاد، ذکر نکنم که مشکلی پیش نمیاد؟