我的代码在启动时输出没有任何内容。当我输入1,2,3:
时,它会打印以下内容1Enter the value of argv[1]:49
2Enter the value of argv[2]:50
3Enter the value of argv[3]:51
我很困惑在使用循环时应该放置refresh()的位置。我正在努力实现像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;
}
答案 0 :(得分:0)
getch()
会返回一个字符,例如'1'
,'2'
或'3'
。这些的整数值是49,50,51。如果需要整数值,则应减去'0'
。
int n = getch() - '0';
请注意,这仅适用于数字(0到9)。如果你输入任何其他东西,它将无法给你预期的答案,所以你可能想在那里添加额外的支票。
答案 1 :(得分:0)
假设您处于延迟模式,getch()
将阻止等待用户输入。
首先执行您的printw()
将某些内容放入屏幕缓冲区,然后执行refresh()
以使修改后的屏幕缓冲区可见,然后执行getch()
。
答案 2 :(得分:0)
您可以使用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;
}
答案 3 :(得分:0)
不需要明确调用refresh
,因为getch
会进行刷新,如manual page中所述:
如果窗口不是打击垫,并且自上次调用 wrefresh 后移动或修改了该窗口,则在读取另一个字符之前将调用 wrefresh 。 / p>
如上所述,程序似乎没有显示任何内容,因为最初的curses处于cooked
模式。在调用cbreak
后添加对noecho
和initscr
的来电将允许输入单个字符(再次,请参阅manual page了解ncurses)。
通过这些更改,还有一个问题:最后printw
将不会显示。在getch()
之前放置一个endwin()
即可修复。