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

时间:2015-03-17 09:57:25

标签: c ncurses

我正在编写一个将@字符绘制到控制台屏幕上的函数,并重复自己直到它吸引了一个' H'已经绘制了。基本上是"炸弹"功能。我用一个while循环编写了这个函数,这样它就可以继续绘制角色,只要它所绘制的空间不等于“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语句不起作用?

1 个答案:

答案 0 :(得分:1)

您的代码会绘制@然后检查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; }
        }
     }

您需要重新排列语句的顺序,以便在移动到新位置后,在写入之前进行检查。