C 当我没有在printf语句中添加“%n”时,为什么输出中有“%”?

C 当我没有在printf语句中添加“%n”时,为什么输出中有“%”?,c,printf,C,Printf,我写了一个C程序: #include <stdio.h> int main() { printf("a\n"); } 但是如果我没有在printf语句中添加\n,那么我将得到以下结果: a a% 为什么? 更新:以下是他们的图片: 这是shell的提示。由于没有最终换行符,程序的输出将直接运行到下一个提示符。字符%很可能是命令行提示符 “\n”是一个新行字符。在第一种情况下,您可能会在下一行中看到%,就在a之后,类似于: // printf("a"); % gcc

我写了一个C程序:

#include <stdio.h>

int main() {
  printf("a\n");
}
但是如果我没有在printf语句中添加
\n
,那么我将得到以下结果:

a   
a%
为什么?

更新:以下是他们的图片:


这是shell的提示。由于没有最终换行符,程序的输出将直接运行到下一个提示符。

字符
%
很可能是命令行提示符

“\n”
是一个新行字符。在第一种情况下,您可能会在下一行中看到
%
,就在
a
之后,类似于:

// printf("a");
% gcc prog.c
% ./a.out
a%
 ^

// printf("a\n");
% gcc prog.c
% ./a.out
a
%
^

编辑:事实证明,有些shell在部分输出行的末尾打印特殊字符(例如,
%
),以防止提示覆盖它们。更多详细信息,请参见shell打印的提示。当程序终止时打印。当没有
\n
时,就没有换行符来分隔
printf()
和提示符的输出。

您提供的代码不足以重现问题。只显示a。
%
是您的提示字符串吗?@IvayloStrandjev我想不同的命令行会给出不同的提示,您的命令行不会给出提示,但我的命令行会给出提示。@Mat什么是提示字符串?@KerrekSB它们都只是
a
,使用
less
读取
/tmp/output.txt
时,我没有找到任何换行符。不过,这也没关系,尽管我的回答很好。谢谢大家!不,在第一种情况下没有任何
%
。看起来不同的shell会给出不同的提示,对吗?顺便说一下,我的外壳是Zsh。关键是,
%
是由shell打印的,而不是由程序打印的。shell总是在为下一个命令做好准备时打印它,因此输入插入符号保持在提示符旁边。请看一看:程序终止后,第一种情况下(带有
\n
)是否有任何提示?你在
a%
之后看到其他提示了吗?事实上,我担心在第二种情况下会有一行新词,请看问题中的新图像。谢谢你的截图。
%
肯定是由shell打印出来的。但它似乎有点复杂:shell试图保留部分输出行。请看这个: