如何在cin之后删除一行?

时间:2018-07-27 11:39:19

标签: c++

考虑以下代码:

#include<iostream>

int main() {
    char line[256];
    std::cin.getline(line, 256);
    std::cout << line << std::endl;
}

执行后,无论输入什么文本,控制台上都会出现两次。有没有一种方法可以用以后cout个覆盖用户输入的文本。

1 个答案:

答案 0 :(得分:0)

您可以取消getline的输出

#include <termios.h>
#include <unistd.h>
#include <iostream>
#include <string>


void SetStdinEcho(bool enable = true) {
    struct termios tty;
    tcgetattr(STDIN_FILENO, &tty);
    if( !enable )
        tty.c_lflag &= ~ECHO;
    else
        tty.c_lflag |= ECHO;

    tcsetattr(STDIN_FILENO, TCSANOW, &tty);
}


int main()
{
    SetStdinEcho(false);

    char line[256];
    std::cin.getline(line, 256);

    SetStdinEcho(true);

    std::cout << intput << std::endl;

    return 0;
}

这适用于linux。

我的答案来自这篇帖子Reading a password from std::cin

还有一个Windows版本。