printf中*的作用是什么?

3

我有这段代码:

#include <stdio.h>
#include <conio.h>
void main()
{
    int n = 5;
    clrscr();
    printf("n=%*d", n);
    getch();
}

我得到的输出是:n= 5。为什么有一个空格?它是如何生成的?代码中的*有什么用途?

5
没问题,正如你所看到的,人们很乐意提供帮助:但是,自己尝试着解决问题总是更好的选择。你偏好的搜索引擎就是你的好朋友! - Useless
我可以得到更多的例子吗? - user1525036
3个回答

5

当你不确定的时候,请阅读文档

*

宽度没有在格式字符串中指定,而是作为一个额外的整数值参数在要格式化的参数之前指定。

然而,您似乎使用方法错误。正确的使用方法应该是这样的:

printf("n=%*d", 2, n);

@PriyankaR 这是一个很难回答的问题。许多人会说 K&R 是最好的,因为它们是第一本。 - Richard J. Ross III

3

C手册中明确提到了这一点。

Richard J. Ross III已经给出了答案。只是再次引用手册中的内容。

宽度没有在格式字符串中指定,而是作为一个额外的整数值参数在要格式化的参数之前指定。

考虑以下代码:

#include<stdio.h>

main()
{
    int a,b;
    float c,d;

    a = 15;
    b = a / 2;
    printf("%d\n",b);
    printf("%3d\n",b);
    printf("%03d\n",b);

    c = 15.3;
    d = c / 3;
    printf("%3.2f\n",d);
}

输出结果将是:

7
   7
007
5.10

你可以在这里看到,如何使用printf函数来格式化输出。希望能帮到你。 :)

谢谢提供示例。我可以在哪里找到更多?C语言最好的书是什么? - user1525036
最适合初学者的书籍应该是Yashawant Kanetkar的《Let us C》。 :) 您可以在http://books.google.co.in/books?id=7HrjAAAACAAJ查看这本书。 - Praveen Kumar Purushothaman
是的,我想它在我的大学里是有提供的。我会去了解一下。谢谢。 - user1525036

3

使用这个*,您可以使用变量设置打印的宽度。


1
由于我担心会有一大堆的踩票,所以个人建议你这么做。但是嘿,这取决于你(不过我已经给你点赞了)。 - Richard J. Ross III
1
@RichardJ.RossIII,你从哪里得到人们应该对类似答案进行负投票的想法?! - cnicutar
1
@RichardJ.RossIII 这太荒谬了。没有“完美”的答案。多个回答陈述相同的基本事实,可以在理解问题方面非常有用。 - cnicutar
@cnicutar 我同意,但我自己和其他人都曾经历过许多次失败,所以我喜欢谨慎行事。 - Richard J. Ross III
1
@RichardJ.RossIII,既然你同意了,为什么还要评论“我的答案的副本”? - cnicutar
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接