c++ - 如何在 C++ ncurses 中执行此操作?

标签 c++ ncurses

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

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

最佳答案

这是你想要的吗?它改编自基本示例之一 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();
}

关于c++ - 如何在 C++ ncurses 中执行此操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39480626/

相关文章:

c++ - Ubuntu Conda环境下无法编译R包: x86_64-conda-linux-gnu-c++: not found

c++ 右值引用和 const 限定符

c - C <curses.h> 中的段错误

c - 动态窗口数组,Ncurses

c - C 中的 NCURSES 标准输入

c++ - 为什么这个噪声函数不处理否定参数?

c++ - boost 文件系统版本 3 问题?

c++ - 带有 C++ 模板的构建器模式

text - ncurses 滚动窗口的文本内容

python - 为什么我在使用 TensorFlow CLI Debugger 时得到 "_curses.error: cbreak() returned ERR"?