标签: printf

为什么#include <stdio.h>不需要使用printf()?

会议记录:

>type lookma.c
int main() {
  printf("%s", "no stdio.h");
}

>cl lookma.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

lookma.c
Microsoft (R) Incremental Linker Version 8.00.50727.762
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:lookma.exe
lookma.obj

>lookma
no stdio.h
Run Code Online (Sandbox Code Playgroud)

c printf declaration include

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

如何在C中对齐这样的数字?

我需要将C中的一系列数字与printf()对齐,如下例所示:

-------1
-------5
------50
-----100
----1000
Run Code Online (Sandbox Code Playgroud)

当然,所有这些之间都有数字,但它与手头的问题无关......哦,将破折号视为空格,我使用破折号,因此更容易理解我想要的东西.

我只能做到这一点:

----1---
----5---
----50--
----100-
----1000
Run Code Online (Sandbox Code Playgroud)

或这个:

---1
---5
--50
-100
1000
Run Code Online (Sandbox Code Playgroud)

但这些都不是我想要的,我只能使用printf()来实现第一个例子中显示的内容.有可能吗?

编辑:
对不起的人,我很匆忙,并没有很好地解释自己...我的最后一个例子和你的所有建议(使用像"%8d"之类的东西)不起作用,因为虽然最后一个数字是1000,但它没有对于那件事,一定要一直到1000甚至100或10.

无论要显示的位数,我最多只需要4个前导空格作为最大数字.假设我必须显示从1到1000(A)和1到100(B)的数字,我使用两个"%4d",这将是输出:

A:

---1
....
1000
Run Code Online (Sandbox Code Playgroud)

哪个是我想要的输出...

B:

---1
....
-100
Run Code Online (Sandbox Code Playgroud)

这不是我想要的输出,我实际上想要这个:

--1
...
100
Run Code Online (Sandbox Code Playgroud)

但就像我说的,我不知道我必须打印的确切数字,它可以有1位数,它可以有2个,3个或更多,该函数应该为所有人准备.而且我想要额外增加四个前导空间,但那并不相关.

编辑2: 似乎我想要的,我需要它的方式,这是不可能的(查看David Thornley和Blank Xavier的答案和我的评论).谢谢大家的时间.

c printf alignment

31
推荐指数
2
解决办法
12万
查看次数

向printf传递了太多参数

任何已经工作超过一周的C程序员遇到了因printf使用更多格式说明符而非实际参数调用而导致的崩溃,例如:

printf("Gonna %s and %s, %s!", "crash", "burn");
Run Code Online (Sandbox Code Playgroud)

但是,当你向printf 传递太多参数时,是否会发生类似的坏事?

printf("Gonna %s and %s!", "crash", "burn", "dude");
Run Code Online (Sandbox Code Playgroud)

我对x86/x64程序集的了解使我相信这是无害的,虽然我不相信没有一些边缘条件我缺少,而且我不知道其他架构.这种情况是否保证是无害的,或者这里是否存在潜在的崩溃诱因?

c printf

31
推荐指数
2
解决办法
3万
查看次数

Java中System.out.printf命令的问题

我是编程新手,所以我事先道歉.我正在运行一个程序,并且System.out.printf在Java中遇到问题.我知道程序中的其他所有内容都正常工作(测试过).然而,这似乎不起作用.

错误是:

线程"main"中的异常java.util.IllegalFormatConversionException:d!=
java.util.Formatter中的java.lang.Double $ java.util.Formatter上的FormatSpecifier.failConversion(未知源)
$
java上的FormatSpecifier.printInteger(未知源).util.Formatter $ FormatSpecifier.print(来源不明)
在java.util.Formatter.format(来源不明)
在java.io.PrintStream.format(来源不明)
在java.io.PrintStream.printf(来源不明)
在Advisor_Score .主要(Advisor_Score.java:17)

我的代码是:

import java.lang.Math;
public class Advisor_Score {
    public static void main(String[] args){ 
        double l[] = {101,1,1,1};
        double k[] = {102,2,2,4};
        double m[] = {103,5,5,5,5,5,5,5};
        double All_users[][]={l,k,m};
        double sum[]=new double [All_users.length];
        double [] raw_advisor=new double [All_users.length];
        double []advisor_score= new double [All_users.length];
        for (int i=0;i<All_users.length;i++){
                for(int j=1;j<All_users[i].length;j++){
                        sum[i]+=All_users[i][j];
                }
                raw_advisor[i]=((sum[i]-(3*(All_users[i].length-1)))/4);
                advisor_score[i]= 2.5+(2.5*(1-Math.pow(Math.E, -.5*raw_advisor[i])));
                System.out.printf("%d: %d\n", All_users[i][0], advisor_score[i]);
                }       
    }
}
Run Code Online (Sandbox Code Playgroud)

不确定为什么它不起作用.

java printf

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

指针在printf()中不起作用

打印指针时遇到问题.每次我尝试编译下面的程序时,我都会收到以下错误:

pointers.c:11: warning: format ‘%p’ expects type ‘void *’, but argument 2 has type ‘int *’
Run Code Online (Sandbox Code Playgroud)

我显然在这里遗漏了一些简单的东西,但是从我见过的类似代码的其他考试中,这应该是有效的.

这是代码,任何帮助都会很棒!

#include <stdio.h>

    int main(void)
    {
       int x = 99;
       int *pt1;

       pt1 = &x;

       printf("Value at p1: %d\n", *pt1);
       printf("Address of p1: %p\n", pt1);

       return 0;
    }
Run Code Online (Sandbox Code Playgroud)

c printf pointers

31
推荐指数
2
解决办法
8万
查看次数

舍入到最接近的分数(一半,四分之一等)

所以,我需要创建以下函数,但是如果没有复杂的数学运算,我的脑袋就不会想到PHP的任何可能性.

  • 舍入总是达到最接近的小数(1.81 = 1.90,1.89 = 1.90,1.85 = 1.90)
  • 舍入总是下降到最接近的小数(1.81 = 1.80,1.89 = 1.80,1.85 = 1.80)
  • 始终到最接近的X.25/X.50/X.75 /×.00(1.81 = 2,1.32 = 1.50)
  • 始终至最接近的X.25/X.50/X.75 /×.00(1.81 = 1.75,1.32 = 1.25)
  • 始终到最接近的X.50/1(1.23 = 1.50,1.83 = 2)
  • 始终至最接近的X.50/1(1.23 = 1,1.83 = 1.50)

我现在已经在Google上搜索了2个小时,唯一出现的就是Excel论坛.是否可以使用一些简单的PHP行?

php printf rounding floor ceil

31
推荐指数
2
解决办法
3万
查看次数

如何使用printf自定义自定义类型的输出?

我已经阅读了很多专家F#,正在构建一个实际的应用程序.在调试时,我已经习惯于传递这样的fsi命令,以使repl窗口中的内容清晰可见:

fsi.AddPrinter(fun (x : myType) -> myType.ToString())
Run Code Online (Sandbox Code Playgroud)

我想扩展它以使用printf格式化程序,所以我可以输入例如

printf "%A" instanceOfMyType 
Run Code Online (Sandbox Code Playgroud)

并控制自定义类型的输出.本书暗示可以做到这一点(第93页,"可以扩展通用结构格式以适用于任何用户定义的数据类型,F#网站上涵盖的主题"),但我没有找到任何关于如何实际上实现这一点.有谁知道怎么样?它甚至可能吗?

编辑:

我应该包含一个代码示例,它是我正在处理的记录类型,例如

type myType = 
    {a: int}        
    override m.ToString() = "hello"

let t = {a=5}
printfn "%A" t
printfn "%A" (box t)  
Run Code Online (Sandbox Code Playgroud)

两个印刷语句产生:

{a = 5;}
Run Code Online (Sandbox Code Playgroud)

printf f# string-formatting f#-interactive

30
推荐指数
2
解决办法
9423
查看次数

什么和\ b做什么?

我期待这段简单的代码

printf("foo\b\tbar\n");
Run Code Online (Sandbox Code Playgroud)

用"\ t"替换"o"并产生以下输出

fo     bar
Run Code Online (Sandbox Code Playgroud)

(假设每8个字符发生制表位).相反,我得到了

foo    bar
Run Code Online (Sandbox Code Playgroud)

似乎我的shell将\ b解释为"将游标移回一个位置"并将\ t解释为"将光标移动到下一个制表位".这种行为是否特定于我正在运行代码的shell?我应该期望不同系统有不同的行为吗?

c printf

30
推荐指数
2
解决办法
22万
查看次数

使用printf打印clock_t的正确方法是什么?

我目前正在使用显式强制转换unsigned long long并使用%llu它来打印它,但既然size_t有说明%z符,为什么没有clock_t

甚至没有宏观.也许我可以假设在x64系统(操作系统和CPU)size_t上长度为8个字节(即使在这种情况下,他们已提供%z),但是呢clock_t

c io printf clock

29
推荐指数
3
解决办法
6万
查看次数

格式说明符%02x

我有一个简单的程序:

#include <stdio.h>
int main()
{
        long i = 16843009;
        printf ("%02x \n" ,i);
}
Run Code Online (Sandbox Code Playgroud)

我使用%02x格式说明符来获得2个char输出,但是,我得到的输出是:

1010101 
Run Code Online (Sandbox Code Playgroud)

虽然我期待它:01010101.

c printf format-specifiers

29
推荐指数
3
解决办法
9万
查看次数