如何创建一个返回Ncurses函数的函数

时间:2016-11-11 21:19:39

标签: c++ function types return ncurses

我是编程新手。我正在尝试制作一个非常基本的Ncurses游戏。我的问题是我有一些非常重复的代码,我拿一个字符串,计算它的长度,除以2,然后减去列的数量。我这样做,所以我可以将我的文字放在屏幕上。我希望通过创建一个函数来使这更容易,但我不知道如何创建一个返回Ncurses函数的函数mvprintw(y,x,string)

这是我的代码,您可以更好地理解:

#include <iostream>
#include <ncurses.h>
#include <string.h>

int main(){

initscr();

int x,y;

    getmaxyx(stdscr, y, x);
    mvprintw(0,x/2-(strlen("************")/2), "************");
    mvprintw(1,x/2-(strlen("Welcome")/2), "Welcome");
    mvprintw(2,x/2-(strlen("************")/2), "************");
    refresh();
    getch();

endwin();
return 0;
}

3 个答案:

答案 0 :(得分:2)

你弄清楚你想要执行的操作取决于参数,所以你知道要传递什么。然后它就像编写操作一样简单,同时用参数名替换实际参数。

void center_text(int y, int x, char const* text) {
  mvprintw(0,x/2-(strlen(text)/2), text);
}

完成后,只需使用它:

getmaxyx(stdscr, y, x);
center_text(0, x, "************");
center_text(1, x, "Welcome");
center_text(2, x, "************");

答案 1 :(得分:1)

我相信,这就是你所需要的:

void centered(const char* str, int &x){
    static int count = 0;
    mvprintw(count,x/2-(strlen(str)/2), str);
    count++;
}

....

centered("************", x)
centered("Welcome", x)
centered("************", x)

但是你应该在尝试编写函数之前了解它们(显然)

答案 2 :(得分:1)

这是一个能完成这项工作的功能:

static void printCentered(int y, int x, char * text) {
    mvprintw(y, x - (strlen(text) / 2), text);
}

我修改了居中计算,假设x代表中心线。 然后,您可以使用此功能,而不是直接调用mvprintw。

printCentered(0, x, "***************");
printCentered(1, x, "Welcome");
printCentered(2, x, "***************");