繁体   English   中英

C,ncurses; while循环中的if语句无法正常运行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM