c语言 字符串 预处理

来源:百度知道 编辑:UC知道 时间:2024/06/23 17:38:34
#define FORMAT "%s! c is cool!\n"
int main (void)
{
printf(FORMAT,FORMAT);
return 0;
}
其结果打印为:
%s! c is cool!
! c is cool!
为什么第二行没有%s了??将printf(FORMAT,FORMAT)改为printf("%s! c is cool!\n","%s! c is cool!\n")是有同一结果的 但为什么又将此处第一个%s去掉就只打印一行了,而将第二个%s去掉 则打印结果就都没有%s了?? 我是新手 请大家教我!!

printf(FORMAT,FORMAT);
第一个FORMAT是格式,第二个FORMAT是要显示的字符串

在第一个FORMAT中%s代表以字符串形式显示,第一个和第二个FORMAT合起来显示 %s! c is cool!\n! c is cool!\n
但是你的字符串中的"\n",代表回车
因此显示为:
%s! c is cool!
c is cool!

很简单呀
#define FORMAT "%s! c is cool!\n"
等价与
#define FORMAT "%s!

这样就能看懂了吧?

printf(FORMAT,FORMAT)=printf("%s! c is cool!\n","%s! c is cool!\n");
前一个FORMAT是格式控件字符串,后一个FORMAT才是真正要输出的字符串,

printf(FORMAT,FORMAT)=printf("%s! c is cool!\n","%s! c is cool!\n");
%s 是字符窜 占位符 输出的时候是输出字符串 "%s! c is cool!\n"

\n 回车 换行 所以输出了就是你的那个样子

建议初学者只要会编程,程序能运行就够了,不必深究细枝末节.