c中的格式说明符值问题
format specifier value issue in c
int friends = 20;
printf("I have %d friend%c", friends , (friends !=1 ? "s" : ""));
return 0;
所以每当我运行它调试到这个
的代码
I have 20 friend$
当我 运行 它在 friend
之后使用 %s 格式说明符时它工作正常。 s
只有一个字符,为什么不起作用?
为什么它不起作用? 因为 %c
期望 char
但表达式 (friends !=1 ? "s" : "")
导致字符串(双引号)。所以要么使用 %s
like
printf("I have %d friend%s", friends , (friends !=1 ? "s" : ""));
或
将 "s"
替换为 's'
,将 ""
替换为 ' '
,如 %c
所期望的那样 char
。
printf("I have %d friend%c", friends , (friends !=1 ? 's' : ' '));
"s" 不是一个字符,它是一个字符串文字,其类型为 char *
's'是一个字符类型为int的常量。
C 中的字符串文字需要双引号,并且 printf( ) 具有格式说明符 %s 以打印字符串文字。
C 中的字符常量需要单引号,而 printf( ) 有格式说明符 %c 来打印它们。
现在你的代码片段,
printf("I have %d friend%c", friends , (friends != 1 ? "s" : ""));
将return字符串文字,因为
"s" or " "
是字符串文字,printf( ) 需要格式指定“%s”来打印它们。
如果您想在代码片段中使用 %c 格式说明符,则使用字符常量 's' 而不是字符串文字 "s"
printf("I have %d friend%c", friends , (friends != 1 ? 's' : ' '));
^
另请注意,单引号之间必须有一个 space,如插入符号上方所示,否则会出现 错误:空字符常量。
在字符串文字的情况下,允许空字符串。
int friends = 20;
printf("I have %d friend%c", friends , (friends !=1 ? "s" : ""));
return 0;
所以每当我运行它调试到这个
的代码I have 20 friend$
当我 运行 它在 friend
之后使用 %s 格式说明符时它工作正常。 s
只有一个字符,为什么不起作用?
为什么它不起作用? 因为 %c
期望 char
但表达式 (friends !=1 ? "s" : "")
导致字符串(双引号)。所以要么使用 %s
like
printf("I have %d friend%s", friends , (friends !=1 ? "s" : ""));
或
将 "s"
替换为 's'
,将 ""
替换为 ' '
,如 %c
所期望的那样 char
。
printf("I have %d friend%c", friends , (friends !=1 ? 's' : ' '));
"s" 不是一个字符,它是一个字符串文字,其类型为 char *
's'是一个字符类型为int的常量。
C 中的字符串文字需要双引号,并且 printf( ) 具有格式说明符 %s 以打印字符串文字。
C 中的字符常量需要单引号,而 printf( ) 有格式说明符 %c 来打印它们。
现在你的代码片段,
printf("I have %d friend%c", friends , (friends != 1 ? "s" : ""));
将return字符串文字,因为
"s" or " "
是字符串文字,printf( ) 需要格式指定“%s”来打印它们。
如果您想在代码片段中使用 %c 格式说明符,则使用字符常量 's' 而不是字符串文字 "s"
printf("I have %d friend%c", friends , (friends != 1 ? 's' : ' '));
^
另请注意,单引号之间必须有一个 space,如插入符号上方所示,否则会出现 错误:空字符常量。
在字符串文字的情况下,允许空字符串。