c - ncurse 窗口中的 printw 加 scanf 将不会显示键入的文本

标签 c ncurses

我的程序的这一部分会无限期地在屏幕上打印一些内容,直到用户点击空格键并输入一些值。我尝试在第一个 printw 之前调用 echo() 但它不起作用。谁能告诉我为什么打字时价格没有显示在屏幕上或至少指向正确的地方?我最初也使用过 scanw,但它不会中断循环,并且已经检索了一些随机值的价格。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <ncurses.h>


int kbhit(void){
    int ch = getch();
    if (ch != ERR) {
        ungetch(ch);
        return 1;
    } else {
        return 0;
    }
}

int main()
{
    initscr();
    cbreak();
    echo();
    nodelay(stdscr, TRUE);
    scrollok(stdscr, TRUE);
    int price;

    while(1){
        printw("sleeping...\n");
        refresh();
        if (kbhit()) {
            char c = getch();
            switch (c){
                case 32:
                    printw("\nPrice in USD? ");
                    refresh();
                    scanf("%d", &price);
                    printw("\nPrice entered: %d\n",price);
                    refresh();
                    break;
            }
        }
        sleep(1);
    }
    return 0;
}

最佳答案

它不起作用,因为scanf从标准输入读取,该输入被置于原始模式由ncurses(实际上是任何curses库)提供。您可能的意思是 scanw ,它使用 ncurses 库读取输入。

关于c - ncurse 窗口中的 printw 加 scanf 将不会显示键入的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50014137/

相关文章:

c - 使用 printf() 函数内的指针分配格式说明符

c - 为什么 ncurses 不会输出 UTF8 字符串的所有外来字符?

c - 为什么 const 变量不需要在 C 中初始化?

c - 根据 2 级 C-mex S-Function 中的导入数据类型设置输出端口的 Simulink block 数

c - 将备用文件逐行打印到 c 中的第三个文件中

C 程序在 Mac OSX 和 Linux 上表现不同

unit-testing - 如何对 Curses 应用程序进行单元测试?

c - 在 C 项目中包含 OCR Api

c - ncurses: Subwin 或 pad 的 subpad

c - 从 ncurses 窗口中的特定坐标获取字符