%*s 格式说明符 C

发布于 2024-12-15 12:30:03 字数 95 浏览 0 评论 0原文

printf("%d",printf("%*s%*s",6,"",6))

结果是2个数字相加(6+6),有谁有关于这种类型的格式说明符

printf("%d",printf("%*s%*s",6,"",6))

Results in the addition of the 2 numbers (6+6), does anyone have on such type of format specifiers

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

情话墙 2024-12-22 12:30:04

您的示例格式错误,“嵌套”printf 缺少参数。

如果你这样写:

printf("%d",printf("%*s%*s",6,"",6, ""));

if 就可以了。 * 表示必须从 printf 的下一个参数读取精度字段。因此,在这种情况下,“嵌套”的 printf 打印两个长度最多为 6 的字符串。

由于 printf 返回写入的字符数,因此内部 printf code> 返回 12,这是外部 printf 打印的内容。

引用手册页的相关部分:

精度

可选精度,采用句点 ('.') 后跟可选十进制数字字符串的形式。
除了十进制数字字符串之外,还可以写“*”或“*m$”(对于某些十进​​制整数m)来指定
精度分别在下一个参数或第 m 个参数中给出,这必须
是 int 类型。如果精度仅指定为“.”,或者精度为负,则精度
被视为零。这给出了 d、i、o、u、x 和 X 出现的最少位数
转换,a、A、e、E、f 和 F 的基数字符后出现的位数
版本、g 和 G 转换的最大有效位数,或
要从字符串打印的字符以进行 s 和 S 转换。

我不确定这有多便携,但我确信有更好的方法来添加两个数字强>。

Your example is malformed, there's a missing argument to the "nested" printf.

If you write it like this:

printf("%d",printf("%*s%*s",6,"",6, ""));

if becomes kind of ok. The * means that the precision field must be read from the next argument to printf. So in this case, the "nested" printf prints two strings of length at most 6.

Since printf returns the number of characters written, the inner printf returns 12, which the outer printf prints.

Quote from the relevant part of the man page:

The precision

An optional precision, in the form of a period ('.') followed by an optional decimal digit string.
Instead of a decimal digit string one may write "*" or "*m$" (for some decimal integer m) to specify
that the precision is given in the next argument, or in the m-th argument, respectively, which must
be of type int. If the precision is given as just '.', or the precision is negative, the precision
is taken to be zero. This gives the minimum number of digits to appear for d, i, o, u, x, and X
conversions, the number of digits to appear after the radix character for a, A, e, E, f, and F con‐
versions, the maximum number of significant digits for g and G conversions, or the maximum number of
characters to be printed from a string for s and S conversions.

I'm not sure how portable this is, but what I'm sure of is that there are much better ways to add two numbers.

丢了幸福的猪 2024-12-22 12:30:04

A * 作为宽度说明符表示宽度作为参数传入。

printf("%*s%*s", 6, "", 6, "");

相当于:

printf("%6s%6s", "", "");

这将打印出 12 个空格。

由于printf返回打印的字符数,因此它将返回12。

原始代码缺少最后一个“”参数。如果它有效,那纯属偶然。

A * as the width specifier indicates that the width is passed in as a parameter.

printf("%*s%*s", 6, "", 6, "");

is equivalent to:

printf("%6s%6s", "", "");

This would print out 12 spaces.

Since printf returns the number of characters printed, it will return 12.

The original code is missing the final "" parameter. If it works, it is purely by accident.

青丝拂面 2024-12-22 12:30:04

printf 返回打印的字符数。其余的应该是显而易见的。

printf returns the number of characters printed. The rest should be obvious.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文