繁体   English   中英

如何在c ++ ncurses中做到这一点?

[英]How to do this in c++ ncurses?

ifstream inputfile;
string line;
if (inputfile.is_open())
    {
            while (getline(inputfile,line))
            {
                    cout << line << endl;
            }
            inputfile.close(); 
    }

这是我要在ncurses中实现的行为。 我想将文本内容打印到ncurses窗口而不是控制台。 我应该用getstr()和printw()的char数组而不是字符串替换getline()吗?

这就是你想要的吗? 它是从此处的一个基本示例改编而成的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM