【问题标题】:Add delete characters when clicking on backspace单击退格键时添加删除字符
【发布时间】:2020-01-21 19:11:15
【问题描述】:

我需要添加点击退格时删除字符的代码:

double inputDoubleNumber() {
    double result = 0;
    int char_code;
    std::string buffer = "";
    bool dot = false;
    do {
        char_code = _getch();
        if (char_code > 47 && char_code < 58 || char_code == 46 ) {
            if (char_code == 46 && dot == true) continue;
            if (char_code == 46) dot = true;
            buffer += (char)char_code;
            std::wcout << (char)char_code;
        }
    } while (char_code != 13);
    std::wcout << std::endl;
    result = atof(buffer.c_str());
    return result;
}

我该怎么做?

【问题讨论】:

  • 这不是 C 函数,因为它使用 C++ 类型和对象,例如 std::stringstd::wcout
  • 您想在用户按退格键时从buffer 中删除最后输入的字符吗?
  • 你为什么用getch而不是std::cin
  • 是的,我想从缓冲区中删除最后一个字符
  • 请尽量避开magic numbers

标签: c++ string console


【解决方案1】:

尽管有关于使用幻数的警告,但您可以在 _getch() 调用之后立即添加以下代码块:

    if (char_code == '\b' && !buffer.empty()) { // Ignore B/S if buffer is empty
        if (buffer.back() == '.') dot = false;  // Need to check/reset "dot" flag
        buffer.pop_back();                      // remove last character...
        std::wcout << L'\b' << L' ' << L'\b';   //... and clear from screen
    }

或者,如果您想用一击退格键删除所有个输入字符,您可以改用这个:

   if (char_code == '\b') {
        dot = false;
        while (!buffer.empty()) {
            buffer.pop_back();
            std::wcout << L'\b' << L' ' << L'\b';
        }
    }

【讨论】:

  • 对值进行硬编码的using '\b' instead 怎么样?
  • @Christophe 一个很好的观点(见编辑)。我不记得第一次发帖时\b 的转义序列!
猜你喜欢
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多