【问题标题】:C, ncurses; if statement within while loop not functioning properlyC、ncurses; while 循环中的 if 语句无法正常运行
【发布时间】:2015-03-17 18:02:58
【问题描述】:

我正在编写一个函数,它将@ 字符绘制到控制台屏幕上,并重复自身直到它绘制到已经绘制的“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 语句不起作用?

【问题讨论】:

  • 为什么要给mvinch打两次电话?

标签: c ncurses


【解决方案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; }
        }
     }

你需要重新排列你的陈述的顺序,这样一旦你搬到一个新的地方,你在写信之前检查它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-14
    • 2019-08-29
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多