【问题标题】:C - Ncurses compiling errorC - Ncurses 编译错误
【发布时间】:2014-07-09 08:25:20
【问题描述】:

我正在制作一个迷宫游戏,其中人通过我创建的 printf'ed 迷宫移动光标。迷宫由许多充当墙壁的“F”字符组成。有什么办法可以告诉我程序,如果光标要移动的地方有一个“F”字符,请执行以下操作,例如打印一条消息。我写了下面的程序,当光标移到字符“F”上时应该显示一条消息。当我编译它时,它给我一个错误说'ncurses.c:24:14:警告:逗号表达式的左操作数无效[-Wunused-value]'。

这是整个程序的关注部分,可以在下面找到

                if(m == 's')
            {
                if((oldy+1,x)=='F')
                {
                mvwprintw(win, 0,0,"Sorry, you cant move there.");  
                wrefresh(win);
                }
            else
                {
                move((y= oldy+1),x);
                refresh();
                oldy = y;
                }
            }

如果您想看的话,这就是完整的程序

#include <ncurses.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int y = 0;
    int x = 0;
    int oldy = 0;
    int oldx = 0;
    char m = 'l';
    initscr();
    WINDOW* win;
    win = newwin(1, 40, 40 ,0);
    refresh();
    mvwprintw(win, 0,0,"First line");
    wrefresh(win);

    while(m != 'q')
    {
            m=getch();
    if(m == 's')
        {
            if((oldy+1,x)=='F')
            {
            mvwprintw(win, 0,0,"Sorry, you cant move there.");  
            wrefresh(win);
            }
        else
            {
            move((y= oldy+1),x);
            refresh();
            oldy = y;
            }
        }
    else if(m == 'd')
        {
            move(y,(x=oldx+1));
            refresh();
            oldx = x;
        }
    else if(m == 'a')
        {
            move(y,(x=oldx-1));
            refresh();
            oldx = x;
        }
    else if(m == 'w')
        {
            move((y= oldy-1),x);
            refresh();
            oldy = y;
        }
    else 
        m = 'q';
    }

    delwin(win);
    endwin();

    return 0;
}

【问题讨论】:

  • 开启警告并注意它们

标签: c ncurses


【解决方案1】:

你觉得这条线在做什么?

if((oldy+1,x)=='F')

表达式(oldy+1,x) 使用逗号运算符,它会评估其第一个参数 (oldy+1) 的副作用,并在评估其第二个参数 (x) 之前丢弃结果。然后将结果 (x) 与 'F' 进行比较。

大概你打算在那里调用一个函数。在窗口中的某个位置返回字符的curses 函数是mvwinch。这可能会达到你的意思:

if(mvwinch(win,oldy+1,x)=='F')

【讨论】:

    猜你喜欢
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多