[英]C, ncurses; if statement within while loop not functioning properly
我正在编写一个将@字符绘制到控制台屏幕上的函数,并重复自身,直到它绘制在已经绘制的“ H”上。 基本上是“炸弹”功能。 我使用while循环编写了该函数,以便它可以继续绘制字符,只要它所绘制的空间不等于'H'。 如果它等于“ H”,则我输入了一个if语句来中断程序。 但是,即使使用了if语句,当在'H'上绘制程序时,该程序仍将继续运行。
void bomb_until_hit(int home_radius) {
int x = 0, y = 0;
while (mvinch(y, x) != 'H') {
x = get_next_bomb_x();
y = get_next_bomb_y();
mvaddch(y, x, '@' );
refresh();
sleep(1);
if (mvinch(y, x) == 'H') {
break; }
}
}
mvinch是一种功能,它在绘制新字符之前基本上检查字符的坐标。
为什么我的if语句不起作用?
您的代码绘制一个@
, 然后检查一个H
(两次)。 显然,因为只画了一个@
,所以不会找到H
让我们看看从移动到新位置开始发生的情况:
void bomb_until_hit(int home_radius) {
int x = 0, y = 0;
while (mvinch(y, x) != 'H') { // 5) Check for an H here
x = get_next_bomb_x(); // 1) Move to next X
y = get_next_bomb_y(); // 2) Move to next Y
mvaddch(y, x, '@' ); // 3) Put an @ here
refresh();
sleep(1);
if (mvinch(y, x) == 'H') { // 4) Check for an H here
break; }
}
}
您需要重新排列语句的顺序,以便一旦移至新位置,则在写入之前先对其进行检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.