当前位置: 首页 > 知识库问答 >
问题:

C: ncurses,initscr()改变getchar()的行为?

农鸿德
2023-03-14

我只是在玩诅咒,所以我发现了一个非常奇怪的行为。

当我使用 ncurses lib 中的 initscr() 时,然后我使用普通的 getchar(),然后程序在按下第一个键后终止。

我所期望的正常getchar()行为是,只要我按下回车键,我就可以键入(或多或少)。

#include "curses.h"

int main()
{
    initscr();
    getchar();
  //endwin();

    return 0;
}

有人能给我解释一下为什么会这样吗?

共有1个答案

薛经艺
2023-03-14

curses 将终端输入初始化为原始模式(这反过来又使连接的流表现得好像没有缓冲),以便 curses 可以检测单字符输入。getchar 假定输入是缓冲的,因此您可以按 Enter 结束输入行。在原始模式下,getchar 会立即返回,因为只要您按下某个键,读取调用就会找到某些内容。

除了endwin,您还可以使用其他curse函数在终端的生/熟模式之间来回切换(参见reset_shell_modereset_prog_mode的手册)。

 类似资料:
  • getchar(由标准输入设备内读进一字符) 相关函数 fopen,fread,fscanf,getc 表头文件 #include<stdio.h> 定义函数 int getchar(void); 函数说明 getchar()用来从标准输入设备中读取一个字符。然后将该字符从unsigned char转换成int后返回。 返回值 getchar()会返回读取到的字符,若返回EOF则表示有错误发生。

  • getchar 由标准输入设备内读进一字符 相关函数 fopen,fread,fscanf,getc 表头文件 #include<stdio.h> 定义函数 int getchar(void); 函数说明 getchar()用来从标准输入设备中读取一个字符。然后将该字符从unsigned char转换成int后返回。 返回值 getchar()会返回读取到的字符,若返回EOF则表示有错误发生。

  • 描述 (Description) C库函数int getchar(void) )从stdin获取一个字符(unsigned char)。 这相当于以stdin作为参数的getc 。 声明 (Declaration) 以下是getchar()函数的声明。 int getchar(void) 参数 (Parameters) NA 返回值 (Return Value) 此函数将读取的字符作为unsig

  • 描述 (Description) java.lang.reflect.Field.getChar(Object obj)方法获取静态或实例char字段的值。 声明 (Declaration) 以下是java.lang.reflect.Field.getChar(Object obj)方法的声明。 public char getChar(Object obj) throws IllegalAr

  • 问题内容: 是否有类似于C的Go功能,能够处理控制台中的Tab键?我想在控制台应用程序中完成一些工作。 问题答案: C的示例: 等效: 最后的注释行仅显示当您按下第一个元素时,是U + 0009(’CHARACTER TABULATION’)。 但是,由于您的需要(检测选项卡),C 并不适合,因为它需要用户按Enter键。您需要的是@miku提到的ncurses的getch()/ readline

  • 我最近在摆弄最新的Android P版本,试图运行一个带有标志的简单服务。基本上,这就是我的设置: MainActivity.java null 现在,从recents菜单中删除应用程序后: 这是我所期望的行为。但当我在运行Android P DP4的更新手机上启动应用程序时,生命周期如下所示: 关于Android P null 提前感谢!