C++ &引用;更新;CMD中的行,C++;

C++ &引用;更新;CMD中的行,C++;,c++,cmd,windows-7,C++,Cmd,Windows 7,我需要从用户那里获取输入,但如果传入了无效参数,则“无效”消息会堆积起来。 我更希望它只在同一行上打印无效内容,然后一旦输入正确,它就会将该行重置为原始问题。 我看到过使用\r的讨论,但它似乎对我不起作用 bool getInput(std::variant<std::string, float>* toOut, bool* restart, bool* qUsed){ std::string userIn; std::cin >> userIn;

我需要从用户那里获取输入,但如果传入了无效参数,则“无效”消息会堆积起来。
我更希望它只在同一行上打印无效内容,然后一旦输入正确,它就会将该行重置为原始问题。
我看到过使用\r的讨论,但它似乎对我不起作用

bool getInput(std::variant<std::string, float>* toOut, bool* restart, bool* qUsed){

    std::string userIn;
    std::cin >> userIn;

    if(userIn == SENTINAL){
        *restart = true; 
        return false;
    }

    try {

        *toOut = std::stof(userIn);

    } catch(std::invalid_argument) {

        if(userIn == TO_SOLVE && !*qUsed){
            *toOut = TO_SOLVE;
            *qUsed = true;
        } else {
            std::cout << "\rInvalid, please try again : ";
            getInput(toOut, restart, qUsed);
        }

    }

    return true;

}
bool getInput(标准::变量*输出,bool*重新启动,bool*量化){
std::字符串userIn;
std::cin>>用户输入;
if(userIn==SENTINAL){
*重启=真;
返回false;
}
试一试{
*toOut=std::stof(用户输入);
}catch(std::无效的_参数){
if(userIn==TO_SOLVE&&!*qUsed){
*toOut=求解;
*qUsed=真;
}否则{

一旦用户输入并按下,光标就无法返回到前一行。因此每个“无效…”我认为这在标准库中是不可能的,请查看您的平台或应用程序的控制台操作功能ncurses@Eugene啊,我明白了,这只是因为它是cin而不是out。没有办法临时修改的行为?在标准库中没有办法。您可能想看看这个问题和基本功能来自.Net。