2016-09-13 7 views
0
ifstream inputfile; 
string line; 
if (inputfile.is_open()) 
    { 
      while (getline(inputfile,line)) 
      { 
        cout << line << endl; 
      } 
      inputfile.close(); 
    } 

이것은 ncurses에서 구현하려는 동작입니다. 콘솔 대신 ncurses 창에 텍스트 내용을 인쇄하고 싶습니다. getline()을 getstr()으로 대체하고 printw()를 문자열 대신 문자 배열로 바꿔야합니까?C++ ncurses에서이 작업을 수행하는 방법은 무엇입니까?

답변

0

원하면 무엇입니까? 기본 예제 중 하나 인 here에서 변형되었습니다. 우리가 C에 따라

#include <fstream> 
#include <iostream> 
#include <string> 

#include <ncurses.h> 

int main() 
{ 
    std::ifstream inputfile("filew.txt"); 
    std::string line; 

    initscr(); 

    if(inputfile.is_open()) 
    { 
     while (inputfile >> line) 
     { 
      printw("%s\n", line.c_str()); 
     } 
    } else 
    { 
     printw("didnt find file `file.txt`\n"); 
    } 

    refresh(); 

    std::cin.ignore(); 
    endwin(); 
} 

는 ++ 세계 나는 예외가 endwin를 사용하여 청소하지 않고 프로그램을 종료 할 때 우리가 발생할 수있는 약간 겁 것입니다. 그래서 아마 예외를 안전하게 만들기 위해 간단한 RAII 래퍼를 추가 할 것입니다.

#include <fstream> 
#include <iostream> 
#include <string> 

#include <ncurses.h> 

class ncursewrap 
{ 
    public: 
    ncursewrap() { initscr(); } 
    ~ncursewrap() { endwin();  } 
    void refresh() { ::refresh(); } 
}; 

int main() 
{ 
    std::ifstream inputfile("file.txt"); 
    std::string line; 

    ncursewrap nc; 

    if(inputfile.is_open()) 
    { 
     while (inputfile >> line) 
     { 
      printw("%s\n", line.c_str()); 
     } 
    } else 
    { 
     printw("didnt find file `file.txt`\n"); 
    } 

    nc.refresh(); 

    std::cin.ignore(); 
} 
+0

은 다행 우리는 [축복]이 (https://pypi.python.org/pypi/blessings) –

+0

정말 고마워요! 이것은 정말로 도움이되었습니다. 래퍼는 항상 ncurses와 함께 사용해야합니까? – Char

+0

사물을 단순화시켜야 할 이미 소수가 없다면 놀랄 것입니다. 아마 좋은 생각인데, 소멸자에서 정리되는 래퍼 (wrapper)를 보호해야하는 예외가 어디서 발생했는지 추적하는 것은 매우 어렵습니다. –