无需进入OSX即可获得密钥

时间:2013-07-01 17:12:59

标签: c

请确保您使用的是 OSX!

gcc info:

使用内置规格。 目标:i686-apple-darwin11 配置为:/private/var/tmp/llvmgcc42/llvmgcc42-2336.11〜28 / src / configure --disable-checking --enable-werror --prefix = / Applications / Xcode.app / Contents / Developer / usr / llvm- gcc-4.2 --mandir = / share / man --enable-languages = c,objc,c ++,obj-c ++ --program-prefix = llvm- --program-transform-name = / ^ [cg] [^。 - ] * $ / s / $ / - 4.2 / --with-slibdir = / usr / lib --build = i686-apple-darwin11 --enable-llvm = / private / var / tmp / llvmgcc42 / llvmgcc42-2336.11~ 28 / dst-llvmCore / Developer / usr / local --program-prefix = i686-apple-darwin11- --host = x86_64-apple-darwin11 --target = i686-apple-darwin11 --with-gxx-include-dir =在/ usr /包括/ C ++ / 4.2.1 线程模型:posix gcc版本4.2.1(基于Apple Inc. build 5658)(LLVM build 2336.11.00)

我正试图从按键获取一个字符并显示它。我试图在没有Curses库的情况下这样做(将用于Android和OSX等,我不想移植)。根据另一篇文章,我想出了以下内容......

#include <stdio.h>
#include <termios.h>
#include <time.h>
#include <string.h>

static char ch;
void getkey() {
  struct termios orig_term_attr;
  struct termios new_term_attr;

  /* set the terminal to raw mode */
  tcgetattr(fileno(stdin), &orig_term_attr);
  memcpy(&new_term_attr, &orig_term_attr, sizeof(struct termios));
  new_term_attr.c_lflag &= ~(ECHO|ICANON);
  new_term_attr.c_cc[VTIME] = 0;
  new_term_attr.c_cc[VMIN] = 0;
  tcsetattr(fileno(stdin), TCSANOW, &new_term_attr);

  /* read a character from the stdin stream without blocking */
  /*   returns EOF (-1) if no character is available */
  char test = fgetc(stdin); 
  if(test != -1)
    printf("Value is : %c \n",test);
  ch = test;
  /* restore the original terminal attributes */
  tcsetattr(fileno(stdin), TCSANOW, &orig_term_attr);
}

int main()
{
  do
  {
    getkey();
    int ch2 = (int) ch;
    if(ch2 != -1){
      printf("%c \n",ch);
  }
  }while(1==1);
}

但是这似乎没有清除缓冲区所以当我输入a然后b c c我看到...

  

aababc

目前正在使用命令gcc tect.c和./a.out

在My OSX框中编译和运行

我希望它是abc

1 个答案:

答案 0 :(得分:1)

您的代码有效,但您打印了两次字符:

printf("Value is : %c \n",test);
printf("%c \n",ch);

我已经尝试过了自己:

Value is : a 
a 
Value is : b 
b 
Value is : c 
c 
Value is : d 
d 

顺便说一下,你不应该使用全局变量,而是返回密钥......