如何在 cin.clear() 和 cin.ignore() 之后将光标移动到文本输出的末尾?

How to move cursor to end of text output after cin.clear() and cin.ignore()?

在使用 std::cin.clear() 和 std::cin.ignore() 清除无效输入后,光标移动到 std::cout 打印的下一行的开头。我尝试在不同位置添加额外的 std::endl,但无济于事。

有没有办法强制光标到行尾?

提示

  do {

    std::cout << "Enter a number: ";

    if(!(std::cin >> number)) {
      std::cout << "Not a number. Try again..."<< std::endl;
      std::cin.clear();
      std::cin.ignore(10000, '\n');
    }

  } while (number != -1);

输出

Enter a number: |
Invalid input. Try again...
|Enter a number: 

std::cout 并不总是如您所想。它不是 "the output to the terminal" - 它可以输出到文件,甚至打印机。在打印机上四处移动光标不会执行您可能希望它执行的操作。

因此,您可以尝试打印退格字符 (\b) 并查看会发生什么,但更好的办法是获得一个终端库 - 如 ncurses;这将使您更好地控制光标。