在网上:使用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)
这里有两个核心概念:
printf() 返回打印的字符数.%*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.
首先,printf返回它打印的字符数。
其次,在格式说明符中%*d,*表示要打印的最小字符数,但宽度不是来自格式字符串本身,而是来自附加参数。
总而言之,工作已经完成,但它在小数字上效果不佳,例如1由于%d格式说明符,更好的解决方案可能是:
("%*c%*c", a, ' ', b,' ');
Run Code Online (Sandbox Code Playgroud)