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

Xcode getch()返回\377!而不是阅读字符,xcode,curses,getchar,getch,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

我正在使用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();
}
如果我使用Getchar(),它可以工作,但我不想非得按enter键

我对编码非常陌生,所以它可能很简单,但我不知道


LT

试试这个让你开始

#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);
}

#include试试这个,开始吧

#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);
}

#include好吧,您甚至没有使用
initscr()
初始化Ncurses库

您确实缺少很多东西,因此我建议您阅读说明从初始化(例如,
键盘(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);
}
#包括
int main()
{
int-ch;
initscr();
cbreak();
noecho();
键盘(stdscr,真);
ch=getch();
endwin();
printf(“按下的键是%d\n”,ch);
}

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

您确实缺少很多东西,因此我建议您阅读说明从初始化(例如,
键盘(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);
}
#包括
int main()
{
int-ch;
initscr();
cbreak();
noecho();
键盘(stdscr,真);
ch=getch();
endwin();
printf(“按下的键是%d\n”,ch);
}

IIRC\377==255 decimal==-1 in 2s complaud==EOFCheck-manpage for getch(),您可能会发现它会说类似“在无延迟模式下,如果没有输入等待,则返回值ERR”。在这种情况下,它会立即返回ERR.IIRC\377==255 decimal=-1 in 2s complaud==EOFCheck-manpage for getch()您可能会发现它会说“在无延迟模式下,如果没有输入等待,则返回值ERR”。在这种情况下,它会立即返回ERR。嘿,感谢您的响应。我已经试过你的代码(现在我明白你的意思),但是当我输入一个字符时,我希望它会从do while循环中掉出来,但是它不会,我不明白为什么?嘿,谢谢你的回复。我已经试过你的代码(现在我明白你的意思了),但是当我输入一个字符时,我希望它从do while循环中掉出来,但是它没有,我不明白为什么?