getch()返回\ 377!而不是阅读字符

时间:2013-04-08 16:07:25

标签: xcode curses getchar getch

我正在使用Xcode并使用C语言试图了解如何使用Getch函数来启动项目。我复制了一些有人写过的代码,作为一个应该有效的例子,但是代替我等待我输入一个字符的代码,它会为我返回一个:

#include <midi_lib.h> <---------- this needs to be here for later
#include <curses.h>
int main() {
  keypad(stdscr, TRUE); /* I dont know if this is needed*/
  char c;
  puts("Enter a character\n");
  c = getch();
  printf("You just typed a %c! \n", c);
  getch();
}

这是输出:

Enter a character

You just typed a \377! 

如果我使用Getchar(),它可以工作,但我不想输入。

我对编码很新,所以它可能很简单,但我不知道......

LT

2 个答案:

答案 0 :(得分:1)

好吧,你甚至没有用initscr()初始化Ncurses库。

你真的有很多东西缺失,所以我建议你阅读Ncurses howto,它解释了你从初始化(例如keypad(stdscr, true)是什么)到输入的所有内容以及更多内容。

这是一个有效的例子:

#include <ncurses.h>

int main()
{
    int ch;

    initscr();
    cbreak();
    noecho();
    keypad(stdscr, TRUE);

    ch = getch();
    endwin();

    printf("The key pressed is %d\n", ch);
}

答案 1 :(得分:0)

试试这个让你入门

#include <midi_lib.h> <---------- this needs to be here for later
#include <curses.h>

int main()
{
    char c;

    keypad(stdscr, TRUE);  /* I dont know if this is needed*/

    puts("Enter a character\n");
    do {
        c = getch();   
    } while (c == (char)-1);

   printf("You just typed a %c! \n",c);
}

请注意,getch()会不断轮询键盘以进行输入 none,它将获得-1并重试,直到有一些情况下它将从while循环中掉出并继续。

这可能不是你应该如何编码,但它确实回答了你的问题。计算机在不断轮询键盘时会很忙。