[英]Continuous keyboard input with Curses in C saving string and history of N lines
[英]Why does arbitrary keyboard input change other memory in c, curses?
我正在 C 中试验 Curses,由于某种原因,当我在运行程序时输入一个键时,球会改变方向。 我不知道为什么; 这可能是 memory 泄漏吗? 我不知道该尝试什么,因为我是 C 的初学者。 请提供您所拥有的任何指导!
#include <curses.h>
#include <stdbool.h>
typedef struct ball {
unsigned int x;
unsigned int y;
const char shape;
} Ball;
int main() {
initscr();
cbreak();
noecho();
keypad(stdscr, TRUE);
curs_set(FALSE);
nodelay(stdscr, TRUE);
int maxY, maxX;
int pOneGoingRight = TRUE;
int pOneGoingDown = TRUE;
getmaxyx(stdscr, maxY, maxX);
char input;
Ball pOneBall = {0, 0, '*'};
// Ball *pOneBallPtr = &pOneBall;
while (1) {
clear();
getstr(&input);
if (input == 'q')
break;
mvprintw(0, 0, "Max y and x: %d, %d", maxY, maxX);
mvprintw(1, 0, "Ball y and x: %d, %d", pOneBall.y, pOneBall.x);
if (pOneBall.y == 0) pOneGoingDown = TRUE;
else if (pOneBall.y == maxY) pOneGoingDown = FALSE;
if (pOneBall.x == 0) pOneGoingRight = TRUE;
else if (pOneBall.x == maxX) pOneGoingRight = FALSE;
if (pOneGoingRight) pOneBall.x++;
else pOneBall.x--;
if (pOneGoingDown) pOneBall.y++;
else pOneBall.y--;
mvprintw(pOneBall.y, pOneBall.x, &pOneBall.shape);
refresh();
napms(100);
}
endwin();
return 0;
}
只看你的代码
char input;
Ball pOneBall = {0, 0, '*'};
好的,所以你有一个输入来保存键,然后是一个结构来保存球数据。
然后你打电话
getstr(&input);
从手册
function getstr 等效于对 getch 的一系列调用,直到收到换行符或回车符(终止字符不包含在返回的字符串中)。 结果值被放置在字符指针 str 所指向的区域中。
这意味着 getstr 正在从键盘读取,直到读取换行符或回车符。 没有什么可以阻止它读取 10 个或 100 个字符,并将它们直接写在后面的数据上,即您的球 position 信息。
如果要读取单个字符,请使用getch
或其他方法。 由于似乎没有任何方法可以限制getstr
读取的字符数,所以永远不要使用它。 曾经。
编辑:试试getnstr( &input, 1 )
也许?
编辑编辑:这会在多余的字符上发出哔哔声,这可能是你不想要的。 改用getch
什么的
只需更改 getstr(&input); 通过输入 = getch();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.