printf在终端中为什么会显示额外的%字符?

4

我开始学习使用C语言编写代码,我写了以下程序:

#include<stdio.h>

int main()
{
   int count = 0;

   printf("Count %d.", count);
   return 0;
}

然后我编译并运行程序,数据被打印出来:

Count 0.%

但是如果我将行printf("Count %d.", count);改为printf("Count %d.\n", count);,只需在Count %d.后添加\n,那么打印出的数据如下:

Count 0.

10
你把它运行在哪里?百分号是你的命令提示符吗? - Sami Kuhmonen
你是在电脑上实际编译这个程序吗?还是使用学习/教程网站上的浏览器编译器之一? - Joshua Schlichting
@SamiKuhmonen,我使用gcc在Mac终端上运行。 - Duc Trinh
2
% comes from your shell prompt. Try to run your program and redirect the output to a file. For example, if you named your program main : ./main > test.txt. See, % is not in the file. Or you can reproduce the behavior with this simple command echo -n 'toto' - Arnaud Denoyelle
2
在你的终端中,只需按几次“回车”键。每次都应该会得到一个带有“%”提示符的新行。这个“%”与你的程序无关。 - Tom Karzes
2个回答

7
你的shell很可能会添加一个%符号来表示该行没有正确终止。许多shell都会这样做,例如ZSH或Fish。在macOS上,ZSH也应该是默认的shell。
只需在调用printf时添加一个\n即可。

1
@EricPostpischil 无论哪种方式,解决方案都是相同的。 - Thomas Jager
1
@EricPostpischil 这是什么意思?安装一个新的 shell 非常容易。他们也可能正在使用预配置/预定制的计算机,我们甚至不知道他们正在使用的确切操作系统。这是对问题唯一明智的回答。 - Marco Bonelli
2
@MarcoBonelli:无论安装shell是否容易,或者他们是否使用预配置的计算机都不重要。我的评论说的是一个天真的用户很不可能从默认值更改(而不是安装)他们的shell,而不是更改shell很难。正如我在评论中和其他人指出的那样,这不是唯一合理的答案。“%”可能是shell命令提示符,而不是由shell添加的标记来标记缺少换行符。 - Eric Postpischil
1
如果是这种情况,用户就不会说:“下行(看不见)已经替换了%?”了... - Marco Bonelli
2
@MarcoBonelli:那段文字难以理解,其含义和原因不明确。 - Eric Postpischil
显示剩余2条评论

1

正如Bonelli所说,通过使用%字符,zsh表明输出具有未终止的行。

同时,zsh还可以通过以下方式禁用该功能:

set +o prompt_cr +o prompt_sp

但是下一个提示将会在输出后紧接着显示(在同一行)。

您还可以使用$PROMPT_EOL_MARK变量更改该标记。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接