【问题标题】:Is there a Way to read a text in real time using c++?有没有办法使用 C++ 实时阅读文本?
【发布时间】:2020-02-10 04:05:02
【问题描述】:

基本上我要做的是一个控制台程序,它必须读取我输入的每个字符,并且在输入时必须将每个字符存储在一个链表中。但是,如果执行 Backspace,则必须在执行此操作时从结构中删除该字符。

有没有办法或功能来做到这一点?我正在使用 Windows。

【问题讨论】:

  • 当然,有很多方法可以做到这一点。但我认为要获得这些知识,您可能会阅读一些 c++ 书籍,而不是在不了解基础知识的情况下提出这样的问题(至少看起来如此)
  • 这取决于 thjat 的操作系统。例如,在 Linux 上,您会将 tty 置于原始模式,并一次处理一个字符的输入。不指定自己的操作系统,就不可能有权威的答案。
  • 也许有人可以告诉我为什么循环中的std::cin.get() 不是答案?为什么这被认为是依赖于操作系统的?因为我有一个在循环中使用 std::cin.get() 的 Intro 分配。
  • @sweenish 我认为依赖于操作系统的部分是因为退格键。

标签: c++ string data-structures linked-list console


【解决方案1】:

windows下可以使用conio.h。您只需在while 循环中读取和处理任何键盘输入。这是一个简单的例子:

#include <conio.h>
#include <iostream>
#include <list>

int main()
{
    std::list<char> myChars; // to store what your chars
    std::cout << "START WRITING: ";
    while(true)
    {
        // read the character and perform some logic
        char val = _getch();
        if (static_cast<int>(val) == 8) // backspace: pop_back
        {
            myChars.pop_back();
            std::cout << "\b" << " " << "\b";
            /* no idea how to go up to the previous line in a console :( */
        }
        else if (static_cast<int>(val) == 13) // enter/return: new line
        {
            myChars.push_back('\n');
            std::cout << "\n";
        }
        else if (static_cast<int>(val) == 27) // escape: exit
        {
            break;
        }
        else // push_back
        {
            myChars.push_back(val);
            std::cout << val;
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2022-08-04
    相关资源
    最近更新 更多