OSXを使用していることを確認してください。
gcc 情報:
組み込みの仕様を使用します。ターゲット: 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/include/c++/4.2.1 スレッド モデル: posix gcc バージョン 4.2.1 (Apple Inc. ビルド 5658 に基づく) (LLVM ビルド 2336.11.00)
keypress から char を取得して表示しようとしています。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 が表示されます...
aababc
これは現在コンパイルされており、コマンド gcc tect.c および ./a.out を使用して My OSX ボックスで実行されています。
abcにしてほしい