刷新()应该在哪里使用ncurses
Where should refresh() be using ncurses?
下面的代码在启动时不输出任何内容。当我键入 1,2,3 时,它会打印以下内容:
1Enter the value of argv[1]:49
2Enter the value of argv[2]:50
3Enter the value of argv[3]:51
我对使用循环时应该将 刷新() 放在哪里感到非常困惑。我正在尝试实现类似于 for 循环中的注释。
int main()
{
initscr();
int argv[3];
int argvLen = sizeof(argv)/sizeof(*argv);
for (int i=0; i<argvLen; i++)
{
int n = getch();
printw("Enter value of argv[%d]: %d n", i+1, n);
argv[i] = n;
refresh();
//cout << "Enter value of argv[" << i+1 << "]:" << endl;
//cin >> argv[i];
}
endwin();
return 0;
}
getch()
返回一个字符,例如'1'
、'2'
或'3'
。这些整数值为 49、50、51。如果您需要整数值,则应减去'0'
。
int n = getch() - '0';
请注意,这仅适用于数字(0 到 9)。如果您输入任何其他内容,它不会给您预期的答案,因此您可能希望在那里添加其他检查。
假设您处于延迟模式,getch()
将阻止等待用户输入。
首先做你的printw()
在屏幕缓冲区中放置一些东西,然后做你的refresh()
使修改后的屏幕缓冲区可见,然后做getch()
。
您可以使用 scanf 和相关函数来读取整数值。
int main()
{
int i;
int values[3];
int valuesLen = sizeof(values)/sizeof(*values);
for (i=0; i<valuesLen; i++)
{
printf("Enter value of values[%d]: ", i+1);
scanf("%d", &values[i]);
printf("Value of values[%d]: %d n", i+1, values[i]);
}
return 0;
}
不需要显式调用refresh
,因为getch
会执行刷新,如手册页中所述:
如果窗口不是键盘,并且自上次调用 wrefresh 以来已被移动或修改,则在读取另一个字符之前将调用 wrefresh。
如前所述,该程序似乎没有显示任何内容,因为最初诅咒处于cooked
模式。 在调用initscr
之后添加对cbreak
和noecho
的调用将允许输入单个字符(同样,请参阅ncurses的手册页)。
通过这些更改,还有一个问题:不会显示最后一个printw
。 在endwin()
之前放一个getch()
可以解决这个问题。
相关文章:
- C++我需要了解在哪里使用指针和双指针
- 未定义的引用在哪里
- 谷歌测试中的期望值存储在哪里
- 尽管遵循了规则,内存泄漏在哪里
- 静态数据成员模板专用化的实例化点在哪里
- 在哪里放置我的函数?进入我的母语 Gui 还是进入我的演示者?
- 在哪里声明结构运算符重载
- C++ 中的自定义异常:在哪里定义它们?
- 常量参数存储在哪里 (C++)?
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 此递归函数的每次迭代的值存储在哪里?
- 如何告诉本机节点模块所需的dll存储在哪里?
- 在哪里存储跨平台C++应用存储?
- C++泛型类错误,问题出在哪里?
- 在标准中,模板参数的语法在哪里定义,例如,'std::function<int(char)>'?
- 将类作为主要参数的语法在哪里需要?
- 模板参数在 C++ 中存储在哪里?
- 我的重复检查代码中的错误究竟在哪里?
- 在哪里可以找到 std::bitset 的数据成员?
- 刷新()应该在哪里使用ncurses