【问题标题】:printf produces extra % when printing to stdoutprintf 在打印到标准输出时产生额外的 %
【发布时间】:2017-08-08 03:01:26
【问题描述】:
#include <stdio.h>
#include <stdlib.h>

int main() {
    int year = 2017;
    int month = 8;
    int date = 8;

    printf("%i/%i/%i", date, month, year);
    return EXIT_SUCCESS;
}

这是我的代码。我想打印出来

2017 年 8 月 8 日

但它实际上是打印出来的

8/8/2017%

我该如何解决这个问题?

【问题讨论】:

    标签: c printing


    【解决方案1】:

    你在使用zsh吗?当您的程序在没有尾随换行符的情况下打印输出时,某些 shell 会打印 %% 是一个备用分隔符,用于将程序输出与下一个 shell 提示符分开。看Why ZSH ends a line with a highlighted percent symbol?

    在打印语句的末尾添加一个换行符以消除它:

    printf("%i/%i/%i\n",date , month , year);
    

    我的 Macintosh 上有 zsh,我可以重现这种行为。这是一个简单的C 程序:

    #include <stdio.h>
    
    int main() {
        printf("Hello world!");
    
        return 0;
    }
    

    Output:

    $ ./a.out
    Hello world!%                                                                                              
    

    【讨论】:

    • 几乎不是标准的,而是不标准的行为。我以前从未听说过这个。这似乎是一种特殊 *nix 风格的怪癖。
    • @Lundin 选择外壳,而不是操作系统,我相信是罪魁祸首。我的 Mac 上有 zsh,它做的事情完全相同……这就是我知道的原因,或者至少可以声称知道 OP 的问题是什么。
    猜你喜欢
    • 2023-03-28
    • 2017-03-19
    • 2013-05-01
    • 1970-01-01
    • 2018-12-25
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多