我正在编写类似roguelike游戏的代码,代码的这一部分使用getch()接受用户输入,以指示角色下一步要移动的位置。据我了解,getch()将暂停程序,直到收到用户的输入为止,但是我的代码在到达该行时不会暂停。这是代码

uint32_t pc_next_pos(dungeon *d)
  {
    char comm;
    comm = getch();
    command_move(d, comm);
  }


整个程序可以正确编译,只是它没有暂停程序让我移动角色,而是继续运行直到游戏中的所有怪物死亡后程序终止。该代码不包含在内,因为它在此方法中不起作用。

我在此方法中做错了什么而不允许getch()暂停程序,还是我误解了getch()的作用?

最佳答案

getch()可以阻断或非阻塞(或甚至与一个超时阻塞),这取决于输入选项。你想阻止;您将获得无阻碍的体验。问题不在此函数中,而是在curses初始化代码中的某个位置(未显示)-您可能在nodelay(stdscr, TRUE)之后不久调用诸如timeout()或上述initscr()之类的东西。如果不是,您可能需要添加类似nodelay(stdscr, FALSE)的内容,尽管这应该是默认行为。

您还应该阅读halfdelay()cbreak()(通常与nodelay()timeout()在同一手册页上)。

关于c - 程序不会在getch()处暂停,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42617937/

10-13 05:05