cygwin下面如使用getch()

maetrive 2009-08-09 08:29:46
我其实也不是想进行curses编程,就是在写数据结构的用法时查找第几个元素时,要输入的地方要用到getch(),但是我用的cygwin来编译运行的,报错说没有getch().我试着解决这个问题。
1.我曾尝试着使用在VC里面用的头文件conio.h,但是在cygwin的include包里面没有找到conio.h,所以这条路行不通。
2.我还曾试里在cywin里面添加curses.h,但是发现错误更多。


我现在只是解决如何在cygwin下面如使用getch(),这个问题????????(如果能用curses的方法解决也行。)

源程序如下>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define OK 1
#define OVERFLOW -2
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int ElemType;
typedef int Status;

typedef struct {
ElemType *elem;
int length;
int listsize;
} Sqlist;

Status InitList_Sq(Sqlist *L) {
L->elem = (ElemType *) malloc(LIST_INIT_SIZE * sizeof (ElemType));
if (!L->elem)exit(OVERFLOW);
L->length = 0;
L->listsize = LIST_INIT_SIZE;
return OK;
}

Status ListInsert_Sq(Sqlist *L, int i, ElemType e) {
ElemType *q, *p, *newbase;
if (i < 1 || i > L->length + 1) return ERROR;
if (L->length >= L->listsize) {
newbase = (ElemType*) realloc(L->elem,
(L->listsize + LISTINCREMENT) * sizeof (ElemType));
if (!newbase)exit(OVERFLOW);
L->elem = newbase;
L->listsize += LISTINCREMENT;
}
q = &(L->elem[i - 1]);
for (p = &(L->elem[L->length - 1]); p >= q; --p)
*(p + 1) = *p;
*q = e;
++L->length;
return OK;
}

Status ListDelete_Sq(Sqlist *L, int i, ElemType *e) {
ElemType *p, *q;
if ((i < 1) || (i > L->length)) return ERROR;
p = &(L->elem[i - 1]);
*e = *p;
q = (L->elem + L->length - 1);
for (++p; p <= q; ++p)
*(p - 1) = *p;
--L->length;
return OK;
}

main() {
Sqlist Lst;
int i, n = 101;
ElemType e;
if (InitList_Sq(&Lst) == OK) {
for (i = 1; i <= n; i++)
if (ListInsert_Sq(&Lst, 1, i) != OK) break;
printf("\n");
for (i = 0; i < Lst.length; i++)
printf("i,e=%d,%d\n", i, Lst.elem[i]);
getch();
if (ListDelete_Sq(&Lst, 5, &e) == OK) {
printf("delete_elem=%d\n", e);
getch();
for (i = 0; i < Lst.length; i++)
printf("i,e=%d,%d\n", i, Lst.elem[i]);
}
}
}

请各位大侠们来帮帮忙,在此先谢了各位了
...全文
390 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
maetrive 2009-08-13
  • 打赏
  • 举报
回复
感谢大家对我的问题的关注

billow_zhang的想法很好,但是如何导入curses库呢?
在CYGWIN里面有一个ncurses可选的安装库,选择以后就可以用了,呵呵。
在MinGW里面有conio.h,所以我现在改用MinGW。不过CYGWIN也可以getch()了,呵呵

经过我长达两二天的努力,问题都解决了。使用Netbeans c\c++ 和MinGW,Cygwin编译C程序,全都搞定了。一直以来,我都很喜欢Netbeans有IDE,呵呵。最后没事做的时候把MSYS+MinGW也组起来了。—_—
jiayucunyan 2009-08-11
  • 打赏
  • 举报
回复
"我还曾试里在cywin里面添加curses.h,但是发现错误更多。 "

有什么错误?


maetrive 2009-08-11
  • 打赏
  • 举报
回复
各们大哥大姐们,各位好心人,你们来回看一下啊。提点想法也行啊
DONT BE SCLIENT!
jinwei1984 2009-08-11
  • 打赏
  • 举报
回复
3楼应该能解决你的问题吧
zjw6861982 2009-08-11
  • 打赏
  • 举报
回复
帮顶吧。不太数
billow_zhang 2009-08-11
  • 打赏
  • 举报
回复
conio.h不属于cygwin.
cygwin是在Windows command环境下模拟unix环境的.
所以,应该使用curses库.curses是一套字符终端界面函数库.
首先,源程序的开始,必须:

# include <curses.h>

开始必须调用初始化函数:

initscr();

终止时:还必须调用:

endwin();

也就是说,程序结构如下:
# include <curses.h>

int main(int argc, char **argv)
{
initscr();
noecho();
.......
getch();
........

endwin();

return 0;
}

编译的时候(设程序为test.c):

cc -o test test.c -lcurses

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧