2016-11-11 3 views
0

전 프로그래밍에 완전히 익숙하지 않습니다. 나는 아주 기본적인 Ncurses 게임을 만들려고 노력하고있다. 내 문제는 문자열을 가져 와서 길이를 계산하고 2로 나눈 다음 열의 양을 뺀 매우 복잡한 코드가 있다는 것입니다. 나는 텍스트를 화면 중앙에 배치 할 수 있도록이 작업을 수행합니다. 이 작업을 쉽게 만들려고하지만 Ncurses 함수를 반환하는 함수를 만드는 방법을 모르겠습니다. mvprintw (y, x, string)Ncurses 함수를 반환하는 함수를 만드는 방법

더 잘 이해할 수 있도록 다음은 내 코드입니다.

#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; 
} 
+1

코드는 C입니다 (''은 쓸모가 없습니다). 귀하의 제목 (귀하의 코드와 관련이없는 *)과 관련하여 C++ 11에서는 [closure] (https://en.wikipedia.org/wiki/Closure_%28computer_programming%29)를 사용하여 * a *를 반환합니다. 함수 (어떤 값으로). 아마도 [lambdas] (http://en.cppreference.com/w/cpp/language/lambda)와 [std :: function] (http://en.cppreference.com/w/cpp/utility/functional/ 함수) –

답변

2

당신은 매개 변수 수행하려는 작업이에 따라 무엇인지 파악하고, 그래서 당신은 전달하는 것을 알고있다. 그런 다음 실제 매개 변수의 매개 변수 이름을 대체하는 동안 작업을 작성하는 것만 큼 쉽습니다.

내가 믿는
getmaxyx(stdscr, y, x); 
center_text(0, x, "************"); 
center_text(1, x, "Welcome"); 
center_text(2, x, "************"); 
+0

알겠습니다. 반환 유형이 무효이므로 내부의 명령문이 원하는대로 처리됩니다. 나는 왜 내가 그것을 보지 못했는지 모른다. 고맙습니다! –

1

, 즉 당신이 필요로하는 무엇을 : 당신이 것을 일단

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

, 그냥 사용

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) 

그러나 당신이 그들을 쓰기를 시도하기 전에 기능에 대해 배워야한다 (명백하게)

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, "***************"); 
+0

사실 제 3의 공식적인 인수는'const char * text'가되어야합니다. –

+0

올바르게 이해하면 'x'는 줄의 너비이므로 텍스트를 가운데 맞추기 위해서는'(x - strlen (text))/2' 또는'x/2-strlen (text)/2'를 사용합니다. –

관련 문제