由于ANSI C99,通过stdbool.h
有_bool
或bool
。但是bool是否也有printf
格式说明符?
bool x = true;
printf("%B\n", x);
它将打印:
true
bool
类型没有格式说明符。但是,由于任何短于int
的整数类型在传递给printf()
的变量参数时都被提升为int
,因此您可以使用%d
:
bool x = true;
printf("%d\n", x); // prints 1
但为什么不:
printf(x ? "true" : "false");
或者更好:
printf("%s", x ? "true" : "false");
或者,更好的是:
fputs(x ? "true" : "false", stdout);
取而代之?
假设我有以下功能: 我希望调用者指定要打印的浮点数,以及小数点后的位数。(由<代码>表示)。%d说明符) 然而,在编译此代码时,我收到两个警告: 和 我的问题是:如何将格式说明符(例如本例中的)注入现有格式说明符?
问题内容: 在Swift中,我可以使用格式说明符来格式化字符串: 但是官方文档没有提供有关受支持的格式说明符或如何构建类似于以下内容的模板的任何信息或链接:https : //developer.apple.com/documentation/swift/string/3126742-init 它只说: 返回一个String对象,该对象通过使用给定的格式字符串作为模板进行初始化,剩余的参数值将替换
有了,我可以使用表示
问题内容: 遇到一个有趣的面试问题: 尽管这在某些系统上可能运行良好,但至少我的系统出现了分段错误。对此行为的最佳解释是什么?上面的代码在C中。 以下是我的gcc信息: 问题答案: 首先,第一件事是:期望其%s参数使用有效的(即非NULL)指针,因此将NULL正式传递给它是不确定的。它可能会显示“(null)”,也可能会删除硬盘上的所有文件- 就ANSI而言,这是正确的行为(至少,这是Harbis
说我想打印: 这是正确的。这: 或者这个: ? 事情是在其他地方,所以我遇到了这样的讨论: -即使ch变为无符号字符,代码的行为也不是由C标准定义的。这是因为无符号字符被提升为int(在普通的C实现中),所以int被传递给printf的说明符%u。但是,%u需要一个无符号int,所以类型不匹配,并且C标准没有定义该行为 -你的评论不正确。C11标准规定转换说明符必须与函数参数本身的类型相同,而不是
有人能解释一下printf中的是如何使用说明符“%g”的吗?下面的输出让我很困惑: 我了解到使用最短的表示形式。 但是下面的输出仍然让我困惑 我的问题是:为什么能给出确切的数字,而不能? 似乎16个有效数字是准确的。有人能告诉我原因吗?