2016-09-13 8 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

これはあなたが望むものですか?これは、基本的な例の1つであるhereから適応されています。

#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(); 
} 

我々はC++の世界であるとして、私は、例外は私たちが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

事を簡素化するべきである少数が既に存在しない場合、私は驚くだろう。デストラクタでクリーンアップするラッパーの保護がどこにあるのかをよく把握することは非常に難しいので、おそらく良い考えです。 –

関連する問題