标签: printf

是否将浮点数传递给 printf 未定义的行为?

C99 标准在 for (随后适用于)的规范中讨论了double。它说“一个表示浮点数的参数被转换......”然后在第 9 段中,它说:fprintfprintfdouble

如果转换规范无效,则行为未定义。如果任何参数不是相应规范的正确类型,则行为未定义。

所以我希望以下是未定义的行为,但我的编译器没有警告它。

double d = 2.0;
float f = 2.0f;
printf("%f", d);
printf("%f", f); // here
Run Code Online (Sandbox Code Playgroud)

另一方面,规范fscanf说“浮点数”而不是双。这是像这个用户声称的那样未定义的行为吗?

c printf

4
推荐指数
1
解决办法
294
查看次数

如何在 Java 中使用具有长值的 printf() 方法?

我记得我是用 C 完成的,但我无法在 Java 中使用它。

如何在 Java 中使用 printf() 方法打印长值?

我尝试使用下面的代码,我实际需要的是以十六进制方式打印长值,如下所示

长 l = 32L -----> 0000000000000022

如果我使用 %d 那么它会打印我不想要的整数值......

class TestPrintf() 
{
    public static void main(String[] args)
    {

    long l = 100L;

    System.out.printf(“%l”+l); // Error unknown format exception
    System.out.printf(“%d”+l); // Prints 100
    System.out.printf(“%f”+l); // Unknown illegal format conversion float != java.lang.long
    }
}
Run Code Online (Sandbox Code Playgroud)

java printf long-integer

4
推荐指数
1
解决办法
2万
查看次数

sprintf 等效于客户端 JavaScript

我知道它console.log至少支持printfC 语言的一些基本功能,但我很好奇一种利用console.log的实现来创建类似于sprintf. 我知道你不能简单地使用.bind或者.apply因为console.log实际上并没有返回字符串,所以有没有办法解决这个问题?

如果这实际上不可能,是否还有其他一些鲜为人知的本机实现,只需几行代码即可sprintf在 JavaScript 中实现?

对于那些不知道究竟sprintf是什么的人,这里有一些来自 tutorialspoint 的文档。我正在寻找的示例用法如下:

var string1 = sprintf("Hello, %s!", "world");
var string2 = sprintf("The answer to everything is %d.", 42);
Run Code Online (Sandbox Code Playgroud)

javascript binding printf

4
推荐指数
1
解决办法
5258
查看次数

Java printf 格式化以打印表或列中的项目

我想使用 printf 在整齐的列中打印内容。

happening       0.083333    [4]
hi              0.083333    [0]
if              0.083333    [8]
important       0.083333    [7]
is              0.250000    [3, 5, 10]
it              0.166667    [6, 9]
tagged          0.083333    [11]
there           0.083333    [1]
what            0.083333    [2]
Run Code Online (Sandbox Code Playgroud)

我有这个代码System.out.printf("%s %.6f %s \n", word, web.getFrequency(word), loc);,但它打印出这个:

happening  0.083333  [ 4 ] 
hi  0.083333  [ 0 ] 
if  0.083333  [ 8 ] 
important  0.083333  [ 7 ] 
is  0.250000  [ 3 5 10 ] 
it  0.166667  [ 6 9 ] 
tagged  0.083333  [ 11 ] …
Run Code Online (Sandbox Code Playgroud)

java printf multiple-columns

4
推荐指数
1
解决办法
3万
查看次数

在装配中使用 printf 会导致管道输出为空,但在终端上有效

我尝试printf从我的汇编代码中使用,这是一个应该打印hello到标准输出的最小示例:

.section  .rodata
hello:
    .ascii  "hello\n\0"
.section .text
    .globl _start        
_start:
    movq $hello, %rdi     # first parameter
    xorl %eax, %eax       # 0 - number of used vector registers
    call printf        
#exit   
    movq $60, %rax
    movq $0, %rdi
    syscall
Run Code Online (Sandbox Code Playgroud)

我用

gcc -nostdlib try_printf.s -o try_printf -lc
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它似乎工作:字符串hello被打印出来,退出状态是0:

XXX$ ./try_printf
hello
XXX$ echo $?
0
XXX$
Run Code Online (Sandbox Code Playgroud)

但是当我尝试捕获文本时,很明显,某些内容无法正常工作:

XXX$ output=$(./try_printf) 
XXX$ echo $output

XXX$ 
Run Code Online (Sandbox Code Playgroud)

该变量output应具有 value hello,但为空。

我的用法有printf什么问题?

linux assembly printf glibc x86-64

4
推荐指数
1
解决办法
1359
查看次数

如何在AWK printf中转义百分号?

我正在制作一个 awk 语句,它允许我在屏幕上打印一些 unicode nop(在测试中,其中 18 个)。它目前看起来如下所示:

awk 'BEGIN {while (c++<18) printf "%u9090"}'
Run Code Online (Sandbox Code Playgroud)

当它执行时,它会返回一个运行时错误:

awk:运行时错误:没有足够的参数传递给 printf("%u9090")

我意识到我必须转义我的 % 字符,因为我没有将任何变量传递给 awk,并且它正在等待它们。我修改为以下内容:

awk 'BEGIN {while (c++<18) printf "\%u9090"}'
Run Code Online (Sandbox Code Playgroud)

但是我仍然遇到同样的错误?在GNU文档建议我应该用逃避\,所以我在什么尝试有点不对劲。

awk printf

4
推荐指数
1
解决办法
4516
查看次数

为什么“printf()”的这种模棱两可的行为?

我故意强迫printf()打印celsius为int(使用%8d格式说明符)。我知道这是打印的原因0(在标题下Celsius Scale)。

但我只想知道为什么fahr要0.0在整个表格中打印。

我用过 GCC 编译器。

这是摄氏度到华氏度转换的代码:

#define LOWER 0.0F
#define UPPER 300.0F
#define STEP 20.0F

#include <stdio.h>

void main() {
    float celsius, fahr;
    printf("*Conversion from Celsius to Fahrenheit*\n");
    printf("Celsius Scale \t   Fahrenheit Scale\n");
    for (celsius = LOWER; celsius <= UPPER; celsius = celsius + STEP) {
        fahr = (9.0f * celsius / 5.0f) + 32.0f; 
        printf("%8d\t\t%5.1f\n", celsius, fahr);
    }
}
Run Code Online (Sandbox Code Playgroud)

下表是上述代码的 …

c floating-point printf

4
推荐指数
1
解决办法
233
查看次数

在for循环中声明int数组并在C中更改其元素

我是 C 新手,目前正在学习数组。我有这个代码:

#include <stdio.h>
int main()
{   
    int available[6];
    for(int o=1; o<=3; o++){
        available[o]=20;
        printf("%d\n",&available[o]);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

哪个应该输出(以我的理解):

20
20
20
Run Code Online (Sandbox Code Playgroud)

现在的问题是它输出:

2293300
2293304
2293308
Run Code Online (Sandbox Code Playgroud)

我是否错过了一个关键部分并犯了一些愚蠢的错误?任何帮助将不胜感激。

c printf address-operator

4
推荐指数
1
解决办法
57
查看次数

如何使用格式说明符设置字符串的字段宽度?

printf("%5s\n", "#");
Run Code Online (Sandbox Code Playgroud)

给出:

    #
Run Code Online (Sandbox Code Playgroud)

他们是否可以使用整数格式说明符设置此字符串的字段宽度?

像这样的东西,

printf("%%ds\n", 5, "#");
Run Code Online (Sandbox Code Playgroud)

c printf string-formatting format-specifiers

4
推荐指数
1
解决办法
207
查看次数

为什么在包含 iostream 时可以使用 printf()?

这段代码即使在 C++11 标准下使用 minGW 编译器也能正常工作:

#include <iostream>

int main(int argc, char const *argv[])
{
    printf("haha");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么要这样做?我没有包括,stdio.h但我可以使用像printf()and 之类的函数rand()。他们包括在iostream? 至少我没有发现它们包括在内。如果你说它包含在 中iostream,请给我看证据。

c++ printf iostream

4
推荐指数
1
解决办法
568
查看次数