在C中使用printf添加

bap*_*api 6 c math printf

在网上:使用printf添加两个数字(不使用任何运算符),如下所示:

main()
{
    printf("Summ = %d",add(10,20))
    return 0;
}

int add(int x,int y)
{   
    return printf("%*d%*d",x,' ',y,' ');
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释,这是如何工作的:

return printf("%*d%*d",x,' ',y,' ');
Run Code Online (Sandbox Code Playgroud)

注意:当我称之为"sum"时,这会失败,如下所示:

sum(1,1) or sum(3,-1) 
Run Code Online (Sandbox Code Playgroud)

unw*_*ind 8

这里有两个核心概念:

  1. printf() 返回打印的字符数.
  2. %*d格式说明使printf()从它的参数读取两个整数,并使用第一个来设置用于格式化所述第二(以十进制数)的字段宽度.

因此实际上,添加的值将用作字段宽度,printf()然后返回总和.

目前我还不确定d空间角色的实际格式.这看起来很奇怪,我会用一个空字符串代替:

static int sum(unsigned int a, unsigned int b)
{
    return printf("%*s%*s", a, "", b, "");
}

int main(void)
{
    unsigned int a = 13, b = 6;
    int apb = sum(a, b);

    printf("%d + %d = %d?\n", a, b, apb);

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

以上工作并正确计算总和19.


Yu *_*Hao 1

首先,printf返回它打印的字符数。

其次,在格式说明符中%*d*表示要打印的最小字符数,但宽度不是来自格式字符串本身,而是来自附加参数。

总而言之,工作已经完成,但它在小数字上效果不佳,例如1由于%d格式说明符,更好的解决方案可能是:

("%*c%*c", a, ' ', b,' ');
Run Code Online (Sandbox Code Playgroud)