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

How to do this in c++ ncurses?

本文关键字:这一点 ncurses c++      更新时间:2023-10-16
ifstream inputfile;
string line;
if (inputfile.is_open())
    {
            while (getline(inputfile,line))
            {
                    cout << line << endl;
            }
            inputfile.close(); 
    }

这是我想在护士中实现的行为。我想将文本内容打印到护士窗口而不是控制台。我应该用getstr()和printw()代替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("%sn", 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("%sn", line.c_str());
        }
    } else
    {
        printw("didnt find file `file.txt`n");
    }
    nc.refresh();
    std::cin.ignore();
}
相关文章: