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。