为何无换行符的printf执行后输出%字符?C代码问题咨询
为什么printf不带"\n"时输出后会冒出来个%字符?
嘿,这个问题我碰到过好多次了,先给你吃个定心丸:那个末尾的%绝对不是你的C程序输出的,是你用的Shell(Arch默认一般是Zsh,也可能是配置过的Bash)在搞事情,用来提醒你——上一行程序的输出没以换行符结尾!
具体是怎么回事呢?
- 当你写
printf("Test.");没加\n的时候,程序确实只输出了Test.这几个字符,没输出换行。这时候Shell的提示符(比如你的默认提示符本来就带%)就直接贴在Test.后面显示了,而不是乖乖跳到下一行。 - 为了不让你把Shell提示符和程序输出搞混,Zsh(还有一些自定义过的Bash)会特意在这种情况多显示一个
%,明明白白告诉你:“喂,上一行输出没写完就结束了,我这提示符是紧跟在后面的哦!”
怎么验证?
很简单,改改代码加个换行试试:
#include <stdio.h> int main() { printf("Test.\n"); return 0; }
重新编译运行:
gcc --std=c99 -Wall --pedantic client.c -o client ./client
这时候你会看到Test.单独占一行,Shell提示符在下一行,那个讨厌的%就消失了。
或者你直接在终端敲echo -n "Test."(-n就是不让echo输出换行),也会看到同样的Test.%,这就彻底坐实了%是Shell的提示,不是你程序的锅。
内容的提问来源于stack exchange,提问作者Philluminati
相关产品推荐
相关产品推荐

