啊哈磊_编程从这里起步

标题: Xcode(Mac)如何实现getch()函数功能(conio.h)? [打印本页]

作者: liangchao    时间: 2016-3-19 00:07
标题: Xcode(Mac)如何实现getch()函数功能(conio.h)?
初学C语言,已经基本学完《啊哈C》,同时会在win10上用啊哈c编译器和macos上用Xcode进行C语言学习;
发现在Xcode里,无法用getch(),getche()等函数,原因在于其所依赖的头文件<conio.h>在windows意外的系统都没有;

故,想请教,如何解决并在Xcode里实现getch()功能(以便于后面的迷宫代码编写等);

是从网上找conio.h头文件放进去,还是有其他替代的函数代码?

作者: rosynirvana    时间: 2016-3-19 00:07
liangchao 发表于 2016-3-19 15:43
之前在网上也看都有人提及“ncurses”,不过还是不清楚,方便指点一下具体操作么?

你是在用xcode的模拟终端吗?那个模拟终端有可能不行,要用系统的终端
如果能接受这一点,往下看

首先要装命令行下面用的编译链,在xcode里面找commandLine tools,可以参考
http://docwiki.embarcadero.com/R ... Line_Tools_on_a_Mac

如果能接受这一点,往下看
OSX应该自带了ncurses,但如果要确保没问题,应该考虑安装最新版。在OSX下安装一般unix库最好使用homebrew:
http://brew.sh/
安装好之后在控制台里 brew install ncurses

如果能接受这一点,往下看
使用ncurses那么包含头文件和initscr是少不了的,请先看一眼ncurses的基础教程,例如
https://www.viget.com/articles/g ... the-ncurses-library

然后,ncurses库中有个函数getch,可以参考
http://www.tldp.org/HOWTO/NCURSES-Programming-HOWTO/keys.html

所以说,很多东西都要重新学
作者: lgch    时间: 2016-3-19 08:08
你下载一个<conio.h>头文件,然后include就可以了
作者: liangchao    时间: 2016-3-19 09:15
lgch 发表于 2016-3-19 08:08
你下载一个头文件,然后include就可以了

我想问一下,下载后的头文件放在哪里呢?之前下了一个,放在
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include
似乎还是报错
作者: liangchao    时间: 2016-3-19 09:15
lgch 发表于 2016-3-19 08:08
你下载一个头文件,然后include就可以了

我想问一下,下载后的头文件放在哪里呢?之前下了一个,放在
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include
似乎还是报错
作者: liangchao    时间: 2016-3-19 09:15
lgch 发表于 2016-3-19 08:08
你下载一个头文件,然后include就可以了

我想问一下,下载后的头文件放在哪里呢?之前下了一个,放在
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include
似乎还是报错
作者: liangchao    时间: 2016-3-19 09:16
lgch 发表于 2016-3-19 08:08
你下载一个头文件,然后include就可以了

我想问一下,下载后的头文件放在哪里呢?之前下了一个,放在
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include
似乎还是报错
作者: lgch    时间: 2016-3-19 12:23
我不知道你的编程工具是什么,应该和你的.c文件放在一个文件夹下就可以
作者: lgch    时间: 2016-3-19 12:31
[img]我用的是vc,可以直接添加头文件的,并且可以自己辩解头文件(貌似有这个头文件)

a.jpg (10.92 KB, 下载次数: 5)

a.jpg

作者: zhuzhu81998    时间: 2016-3-19 13:42
源码在那儿就放哪儿,然后注意是#include "conio.h"
作者: liangchao    时间: 2016-3-19 13:49
lgch 发表于 2016-3-19 12:23
我不知道你的编程工具是什么,应该和你的.c文件放在一个文件夹下就可以

是苹果电脑下的Xcode,之前试过放在main.c旁边,还是不行~
作者: liangchao    时间: 2016-3-19 13:55
zhuzhu81998 发表于 2016-3-19 13:42
源码在那儿就放哪儿,然后注意是#include "conio.h"

也试过用引号了,不过报错又显示这个conio.h缺少_mingw.h
是我下载的conio.h问题么?
作者: zhuzhu81998    时间: 2016-3-19 15:11
liangchao 发表于 2016-3-19 13:55
也试过用引号了,不过报错又显示这个conio.h缺少_mingw.h
是我下载的conio.h问题么?

不是,这就涉及到头文件内容了。
作者: rosynirvana    时间: 2016-3-19 15:35
上面的人还是分不清头文件和库,这是两个概念
unix下面提供类似于conio的库是ncurses,或者自己实现也可以
作者: liangchao    时间: 2016-3-19 15:43
rosynirvana 发表于 2016-3-19 15:35
上面的人还是分不清头文件和库,这是两个概念
unix下面提供类似于conio的库是ncurses,或者自己实现也可以

之前在网上也看都有人提及“ncurses”,不过还是不清楚,方便指点一下具体操作么?
作者: liangchao    时间: 2016-3-19 17:24
rosynirvana 发表于 2016-3-19 15:57
你是在用xcode的模拟终端吗?那个模拟终端有可能不行,要用系统的终端
如果能接受这一点,往下看

哇哦,对于新手来说有电复杂,先留着以后会好好琢磨。多谢讲解。
那是是否有其他类似的函数(或者较少的语句组)可以实现getsch()功能吗?以便于实现书中的迷宫程序。
作者: rosynirvana    时间: 2016-3-19 19:44
liangchao 发表于 2016-3-19 17:24
哇哦,对于新手来说有电复杂,先留着以后会好好琢磨。多谢讲解。
那是是否有其他类似的函数(或者较少的 ...

首先大概是不能用xcode里面的虚拟终端的

然后,常见的做法有两种,一种是用ncurses库中的getch,另一种是用termios关掉终端的echo,然后再用select之类的函数监控键盘输入,后者其实比前者还要复杂很多
作者: liangchao    时间: 2016-3-19 21:51
rosynirvana 发表于 2016-3-19 19:44
首先大概是不能用xcode里面的虚拟终端的

然后,常见的做法有两种,一种是用ncurses库中的getch,另一 ...

好吧,原来在Xcode想实现一个按键操控方向的功能都那么难。暂时不折腾了,以后学深入再深究~
作者: rosynirvana    时间: 2016-3-20 01:54
liangchao 发表于 2016-3-19 21:51
好吧,原来在Xcode想实现一个按键操控方向的功能都那么难。暂时不折腾了,以后学深入再深究~

不是在Xcode中不好实现,而是在XCode里不好测试




欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/) Powered by Discuz! X3.2