【问题标题】:printf from c++ in java possible? Or something similar?java中的c ++中的printf可能吗?或者类似的东西?
【发布时间】:2012-07-29 11:28:27
【问题描述】:

我有一个 C++ 程序,它循环了很多计算。对于每个循环,我使用 printf 打印出计算的百分比,例如

“计算已完成 64.7 %。”

每个打印输出都会覆盖前一个,因此在控制台中只使用一行而不是在彼此下打印几行。

这在java中可能吗? java中的printf每次都会打印出一个新行。

或者你们对我如何轻松查看进度有其他想法吗?

【问题讨论】:

  • 您可以做的就是清除屏幕并重新打印。
  • 不,C/C++ 中的printf 不会按照您的要求执行。仅当您将退格/回车打印到终端时,它才会覆盖前面的输出。
  • @Oasa,java中如何清屏?

标签: java c++


【解决方案1】:

是的,这是可能的。 用户System.out.print("your text\r")。它打印行并且不会将光标移动到下一行。序列\r 使光标移动到当前行的开头,因此下一行将从相同的位置再次打印。

【讨论】:

  • 试过并确认它有效。只是不在 Eclipse 的控制台中。
  • 这取决于当前控制台如何解释 '\r' 字符,因此可能会有很大差异。
  • @LokiAstari 该标准要求'\r' 映射到回车,应该按照 ASCII 中的规定(并由 AlexR 描述)表现。在实践中,当然,你是对的——这完全取决于输出设备决定如何解释它:对于控制台窗口或打印机,我会说不做回车将是一个非常糟糕的实现—— -- 与在输出'a' 时显示看起来像 b 的字形几乎处于同一级别。但对于其他类型的设备,谁知道呢。
  • @JamesKanze:控制字符与字形不同。他们的解释差异很大(即使在围绕这个问题的 cmets 中也不能普遍适用)。这就是为什么有一个完整的库专门用于在所有控制台上不可知地控制光标移动(参见 ncurses)。
  • @LokiAstari 不,但基本原理是一样的。代码点确定取决于接收设备的操作。事实上,在某些方面,控制字符(至少其中一些)比字形更严格地定义——'a' 的外观可能因设备而异,而回车意味着它所说的:在从左到右的上下文中,将下一个写入位置定位在行首。任何这样做的设备都坏了。
【解决方案2】:

来自How can I return to the start of a line in a console? 我明白了

System.out.print('\r');

将返回到行首。这也适用于printf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多