c中的格式说明符值问题

时间:2018-04-30 16:21:54

标签: c format-specifiers

int friends = 20;

printf("I have %d friend%c", friends , (friends !=1 ? "s" : ""));

return 0;

所以每当我运行代码时,它都会调试到这个

I have 20 friend$

当我在friend之后使用%s格式说明符运行它时,它工作正常。 s只有一个字符,为什么它不起作用?

2 个答案:

答案 0 :(得分:4)

所以为什么它不起作用?因为%c需要char但是表达式(friends !=1 ? "s" : "")会产生字符串(双引号)。所以要么使用%s之类的

printf("I have %d friend%s", friends , (friends !=1 ? "s" : ""));

"s"替换为's',将""替换为' '%c预计char

printf("I have %d friend%c", friends , (friends !=1 ? 's' : ' '));

答案 1 :(得分:2)

<强>&#34; S&#34;不是一个字符,它是一个字符串文字,其类型为char *
&#39; S&#39;是一个字符常量,其类型为int。
C中的字符串文字需要双引号,而printf()具有格式说明符%s来打印字符串文字 C中的字符常量需要单引号,而printf()具有格式说明符%c来打印它们。

现在是你的代码片段,

printf("I have %d friend%c", friends , (friends != 1 ? "s" : ""));

将返回字符串文字,因为

"s" or " " 

是字符串文字,printf()要求格式指定&#34;%s&#34;打印它们。

如果你想在代码片段中使用%c格式说明符,那么使用,字符常量&#39; s&#39;而不是字符串文字&#34; s&#34;

printf("I have %d friend%c", friends , (friends != 1 ? 's' : ' '));
                                                              ^  

另请注意,单引号之间必须有一个空格,如插入符号上方所示,否则会给出错误:空字符常量。
如果是字符串文字,则允许使用空字符串。