#include <stdio.h>
int main() {
float a = 1234.5f;
printf("%d\n", a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它显示0!! 怎么可能?是什么原因?
我故意%d在printf声明中加入研究行为printf.
我正在尝试读取一行字符,然后打印出字符的十六进制等效值.
例如,如果我有一个字符串,"0xc0 0xc0 abc123"前两个字符是c0十六进制,其余字符是abc123ASCII,那么我应该得到
c0 c0 61 62 63 31 32 33
Run Code Online (Sandbox Code Playgroud)
但是,printf使用%x给了我
ffffffc0 ffffffc0 61 62 63 31 32 33
Run Code Online (Sandbox Code Playgroud)
如何在不使用的情况下获得我想要的输出"ffffff"?为什么只有c0(和80)有ffffff,但没有其他字符?
该声明
printf("%f\n",0.0f);
Run Code Online (Sandbox Code Playgroud)
打印0.
但是,声明
printf("%f\n",0);
Run Code Online (Sandbox Code Playgroud)
打印随机值.
我意识到我表现出某种未定义的行为,但我无法弄明白为什么具体.
所有位都为0的浮点值仍然有效float,值为0.
float并且int在我的机器上具有相同的大小(如果它甚至相关).
为什么使用整数文字而不是浮点文字printf会导致此行为?
如果我使用PS,可以看到相同的行为
int i = 0;
printf("%f\n", i);
Run Code Online (Sandbox Code Playgroud) 是否有printf宽度说明符可以应用于浮点说明符,该说明符会自动将输出格式化为必要的有效位数,以便在重新扫描字符串时,获取原始浮点值?
例如,假设我打印float到2小数位数的精度:
float foobar = 0.9375;
printf("%.2f", foobar); // prints out 0.94
Run Code Online (Sandbox Code Playgroud)
当我扫描输出时0.94,我没有符合标准的保证我将获得原始的0.9375浮点值(在这个例子中,我可能不会).
我想要一种方法告诉printf自动将浮点值打印到必要的有效位数,以确保它可以扫描回传递给的原始值printf.
我可以使用一些宏float.h来导出要传递的最大宽度printf,但是是否已经有一个说明符可以自动打印到必要的有效位数 - 或者至少是最大宽度?
我有两个函数,一个生成消息Starting initialization...,另一个生成检查返回代码和输出"Ok","Warning"或者"Error".但是,生成的输出具有不同的长度:
Starting initialization...Ok.
Checking init scripts...Ok.
Run Code Online (Sandbox Code Playgroud)
我怎么能得到这样的东西:
Starting initialization... Ok.
Checking init scripts... Ok.
Run Code Online (Sandbox Code Playgroud) 像这样写,它输出蓝色文字:
printf "\e[1;34mThis is a blue text.\e[0m"
Run Code Online (Sandbox Code Playgroud)
但是我希望在printf中定义格式:
printf '%-6s' "This is text"
Run Code Online (Sandbox Code Playgroud)
现在我尝试了几种如何添加颜色的选项,但没有成功:
printf '%-6s' "\e[1;34mThis is text\e[0m"
Run Code Online (Sandbox Code Playgroud)
我甚至试图将格式添加到格式但没有成功.这不起作用,我找不到任何一个例子,其中颜色被添加到printf,其中已定义格式,如我的情况.
我有以下声明:
printf("name: %s\targs: %s\tvalue %d\tarraysize %d\n", sp->name, sp->args, sp->value, sp->arraysize);
Run Code Online (Sandbox Code Playgroud)
我想打破它.我尝试了以下但它不起作用.
printf("name: %s\t
args: %s\t
value %d\t
arraysize %d\n",
sp->name,
sp->args,
sp->value,
sp->arraysize);
Run Code Online (Sandbox Code Playgroud)
我怎么能分手呢?
我有一个类,它包含一个"错误"函数,可以格式化一些文本.我想接受可变数量的参数,然后使用printf格式化它们.
例:
class MyClass
{
public:
void Error(const char* format, ...);
};
Run Code Online (Sandbox Code Playgroud)
Error方法应该接受参数,调用printf/sprintf来格式化它然后用它做一些事情.我不想自己编写所有格式,因此尝试找出如何使用现有格式是有意义的.
我知道这听起来不高效,但我正在寻找一种方法来记住所有的printf调用格式代码.%s,%p,%f都是显而易见的,但我不明白的地方%d,从说到.是%i已经采取的其他什么东西?
品质价值作品:
$ printf "%d\n" \'A
65
$
Run Code Online (Sandbox Code Playgroud)
我有两个问题,第一个是最重要的:
printf ×10
c ×8
c++ ×3
bash ×2
ascii ×1
c99 ×1
colors ×1
endianness ×1
formatting ×1
hex ×1
linux ×1
memory ×1
pretty-print ×1
string ×1