int friends = 20;
printf("I have %d friend%c", friends , (friends !=1 ? "s" : ""));
return 0;
所以每当我运行代码时,它都会调试到这个
I have 20 friend$
当我在friend
之后使用%s格式说明符运行它时,它工作正常。 s
只有一个字符,为什么它不起作用?
答案 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' : ' '));
^
另请注意,单引号之间必须有一个空格,如插入符号上方所示,否则会给出错误:空字符常量。
如果是字符串文字,则允许使用空字符串。