我的程序中有一部分无限期地在屏幕上打印一些内容,直到用户点击空格键并输入一些值。我尝试在第一次打印之前调用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;
}
答案 0 :(得分:1)
无法工作因为 scanf
从标准输入读取,该输入被放入原始模式中ncurses(实际上是任何curses库)。你可能意味着scanw
,它使用ncurses库读取输入。
答案 1 :(得分:0)
将nodelay设置为FALSE并在第一个printw允许我使用scanw之前调用echo()。我只需要在scanw之后将它们设置回noecho()和nodelay = TRUE,并且一切正常。谢谢大家!
case 32:
nodelay(stdscr, FALSE);
echo();
printw("\nPrice in USD? ");
refresh();
scanw("%d", &price);
nodelay(stdscr, TRUE);
noecho();
printw("Price entered: %d\n",price);
refresh();
break;