需要关于c中printf()的帮助

时间:2018-01-11 13:56:32

标签: c printf

预测以下程序的输出。

#include <stdio.h>
int main()
{
printf(" \"TEST %% C %% PROGRAM\"");
return 0;
}

答案是&#34; TEST%C%PROGRAM&#34;

为什么呢?我理解%%意味着它会打印%,但是&#34; \&#34; \&#34; printf中的东西?

2 个答案:

答案 0 :(得分:7)

您需要使用字符串分隔符来定义字符串的开头和结尾,如

"Taha Paksu was here"

但如果你需要在字符串中使用引号怎么办?像:

""Taha Paksu" was here" (you can see that the code highlighter is confused too)

然后编译器会在字符串开始和结束的任何地方感到困惑。

为了防止这种情况,存在转义序列。要在引号分隔的字符串中编写引号,您需要先将其转义。像

"\"Taha Paksu\" was here"

\字符用于描述转义序列,如:

Escape sequence Hex value in ASCII  Character represented
\a  07  Alert (Beep, Bell) (added in C89)[1]
\b  08  Backspace
\f  0C  Formfeed
\n  0A  Newline (Line Feed); see notes below
\r  0D  Carriage Return
\t  09  Horizontal Tab
\v  0B  Vertical Tab
\\  5C  Backslash
\'  27  Single quotation mark
\"  22  Double quotation mark
\?  3F  Question mark (used to avoid trigraphs)
\nnn       note 1 any The byte whose numerical value is given by nnn interpreted as an octal number
\xhh…      any  The byte whose numerical value is given by hh… interpreted as a hexadecimal number
\e         note 2 1B    escape character (some character sets)
\Uhhhhhhhh note 3 none  Unicode code point where h is a hexadecimal digit
\uhhhh     note 4 none  Unicode code point below 10000 hexadecimal

如果要在字符串中输出\;你还需要用\\

来逃避它

表格取自:https://en.wikipedia.org/wiki/Escape_sequences_in_C

答案 1 :(得分:2)

%printf及其系列的格式说明符。因此,如果您要打印出实际的百分号,而不是使用printf的格式选项,则必须使用2代替1 %%来逃避它。

\是字符串文字的全局转义字符。

由于某些字符需要这样做,如果我们要打印John said : "Hello",那么我们就不能使用printf("John said "Hello"");,因为这会弄乱字符串文字(它在哪里结束?第二个"?第三个??)。

出于这个原因,我们需要一个字符,表示下一个字符应按字面解释而不是以编程方式解释。 要打印出John said : "Hello",我们需要:printf("John said : \"Hello\"");