预测以下程序的输出。
#include <stdio.h>
int main()
{
printf(" \"TEST %% C %% PROGRAM\"");
return 0;
}
答案是&#34; TEST%C%PROGRAM&#34;
为什么呢?我理解%%意味着它会打印%,但是&#34; \&#34; \&#34; printf中的东西?
答案 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
如果要在字符串中输出\
;你还需要用\\
答案 1 :(得分:2)
%
是printf
及其系列的格式说明符。因此,如果您要打印出实际的百分号,而不是使用printf
的格式选项,则必须使用2代替1 %%
来逃避它。
\
是字符串文字的全局转义字符。
由于某些字符需要这样做,如果我们要打印John said : "Hello"
,那么我们就不能使用printf("John said "Hello"");
,因为这会弄乱字符串文字(它在哪里结束?第二个"
?第三个??)。
出于这个原因,我们需要一个字符,表示下一个字符应按字面解释而不是以编程方式解释。
要打印出John said : "Hello"
,我们需要:printf("John said : \"Hello\"");