【问题标题】:Getting a weird percent sign in printf output in terminal with C使用 C 在终端的 printf 输出中获得一个奇怪的百分号
【发布时间】:2015-01-30 01:24:44
【问题描述】:

我的程序末尾有这个printf 声明:

printf("%d", total_candies);

total_candies 是一个int,虽然我希望一切正常,连同实际数字一起,但最后我得到了一个奇怪的百分号。

谁能告诉我为什么会这样?

【问题讨论】:

  • 这可能是您的控制台提示符吗?尝试在输出中添加换行符:printf("%d\n", total_candies);
  • 请更新您的问题以显示一个完整的程序来显示问题。你怎么知道那个特定的语句正在打印奇怪的百分比字符?会不会是你的 shell 提示符?
  • 我认为一些 zsh 配置默认以这种方式显示没有最终换行符的输出。快速测试:“echo -n hi”是否有相同的行为?
  • 该字符是您的 zsh 提示符的一部分。
  • @iharob: 不,当程序的输出没有以换行符结束时,zsh 会打印那个反向视频% 字符。

标签: c printf zsh


【解决方案1】:

zsh

PROMPT_SP 尝试保留部分行(即不以换行符结尾的行),否则会因PROMPT_CR 选项而被命令提示符覆盖。这通过输出一些光标控制字符(包括一系列空格)来工作,当存在部分行时,它们应该使终端换行到下一行(请注意,这只有在您的终端具有自动边距时才成功,这是典型的) .

当保留部分行时,默认情况下您将看到 inverse+bold character at the end of the partial line‘%’ 代表 normal user‘#’ for root. If set, the shell parameter PROMPT_EOL_MARK` 可用于自定义如何使用部分结尾显示线条。

【讨论】:

    【解决方案2】:

    当程序的(非空)输出不包含尾随换行符时,zsh 添加颜色反转的% 以表明这一点,并在打印提示之前移至下一行;它通常比 bash 的行为更方便,只需在输出结束的地方启动命令提示符。

    【讨论】:

    • 谢谢 我不知道 zsh 的这种行为。现在想来,确实比bash的行为更有用。
    • 注意到与 golang fmt.Prinf("%d", a) 相同的行为此解决方案也适用于那里
    猜你喜欢
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多