<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[getch在linux下的实现，以及替代的方法]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Sat, 26 Jun 2010 13:11:12 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	#include&lt;stdio.h&gt;<br/>#include&lt;conio.h&gt;<br/>int main()<br/>&#123;<br/>char key;<br/>printf(&quot;press a key&quot;);<br/>key=getch();<br/>printf(&quot;you press %c&quot;,key);<br/>return 0;<br/>&#125;<br/>在TC中，先显示“press a key&quot;,你按个键后，显示”you press“，再显示你按的那个键。<br/>对应在linux中的C语言要如何写呢？<br/>我是这样写的但是结果是只输出了“you press&quot;再输出你按的那个键。我要如何修改呢？<br/>#include&lt;stdio.h&gt;<br/>#include&lt;curses.h&gt;<br/>int main()<br/>&#123; printf(&quot;press a key&quot;);<br/> fflush(stdout);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char key;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initscr();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key = getch();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endwin();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;you press %c&quot;,key);<br/> return 0;<br/>&#125; <br/>问题补充：这位高手所说的system(&quot;pause&quot;); 请问是不是暂停屏幕用的，就像TC中在调试时常用getch()来暂停屏幕看输出，但我用getch()是想不按回车键在键盘上捕获所按的键，目前只是显示出这个按键，日后要做成一按这个键不用按回车就立马去执行一些操作，我不是要简单的暂停，不过很感激你提供了暂停的另一种方法。谢谢！但我的问题还没有解决。<br/>getchar()要按一下回车程序才读取输入，能不能不按回车，只要一按键，程序马上做出反应。<br/>getchar()经过我试验后发现不行，达不到我要的效果，请高手们再帮帮忙。谢谢！<br/><br/>原因：<br/>getch()和getche()不是标准C函数，是TC专用的。。。<br/>你可以试试system(&quot;pause&quot;);<br/>记住包含#include &lt;stdlib.h&gt; <br/><br/><br/>模式实现如下：<br/><br/>在windows下可以通过#include &lt;conio.h&gt;使用getch()，但是conio.h并不是一个标准的头文件，conio也不是标准的c库。所以如果在Linux下的c程序中#include &lt;conio.h&gt;，编程就会报错： No Such file or directory!<br/><br/>那么如果想在Linux下使用与getch() 功能相同的函数，怎么办呢？我们可以通过以下的程序模拟实现getch()。<br/><br/><br/><div class="code">#include &lt;termios.h&gt; <br/>/* for tcxxxattr, ECHO, etc */<br/>#include &lt;unistd.h&gt;&nbsp;&nbsp; <br/>/* for STDIN_FILENO *//*simulate windows&#039; getch(), it works!!*/<br/>int getch (void)&#123;&nbsp;&nbsp; <br/>int ch;&nbsp;&nbsp;&nbsp;&nbsp;struct termios oldt, newt;// get terminal input&#039;s attribute&nbsp;&nbsp; <br/>tcgetattr(STDIN_FILENO, &amp;oldt);&nbsp;&nbsp;&nbsp;&nbsp;<br/>newt = oldt;&nbsp;&nbsp;&nbsp;&nbsp;//set termios&#039; local mode&nbsp;&nbsp;&nbsp;&nbsp;<br/>newt.c_lflag &amp;= ~(ECHO&#124;ICANON);&nbsp;&nbsp;&nbsp;&nbsp;<br/>tcsetattr(STDIN_FILENO, TCSANOW, &amp;newt);&nbsp;&nbsp;&nbsp;&nbsp;//read character from terminal input&nbsp;&nbsp;&nbsp;&nbsp;<br/>ch = getchar();&nbsp;&nbsp;&nbsp;&nbsp;//recover terminal&#039;s attribute&nbsp;&nbsp;&nbsp;&nbsp;<br/>tcsetattr(STDIN_FILENO, TCSANOW, &amp;oldt);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>return ch;<br/>&#125;</div><br/><br/>当然你也可以参考CSDN的：<br/>http://download.csdn.net/source/1957263<br/><br/><br/>
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] getch在linux下的实现，以及替代的方法]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>