这里调用 printf() 如何添加数字?
-
21-12-2019 - |
题
我不明白这是怎么回事 printf()
call 正在将两个数字相加。是否 %*c
有什么关系吗?
//function that returns the value of adding two number
int add(int x, int y)
{
NSLog(@"%*c",x, '\r');
NSLog(@"%*c",y, '\r');
return printf("%*c%*c", x, '\r', y, '\r'); // need to know detail view how its working
}
用于呼叫
printf("Sum = %d", add(3, 4));
输出
Sum=7
解决方案
哦,这很聪明。
return printf("%*c%*c", x, '\r', y, '\r');
论成功, printf()
将返回它打印了多少个字符,并且 "%*c", x, '\r'
告诉它打印 x
人物 (x-1
空格后接 1 \r
)。所以, printf("%*c%*c", x, '\r', y, '\r')
将返回打印了多少个字符,即 x+y
.
看 printf(3)
了解更多详情。
笔记:
正如所指出的 @shole, , 这 int add(int x, int y)
作品 仅适用于两者 x
和 y
是非负整数. 。例如:
add(-1, 1) // gives 2 instead of 0
add(0, 1) // gives 2 instead of 1
其他提示
当传递到 printf
(或类似的功能), %*c
意味着您传递的是两个参数而不是一个。第一个参数指定字段宽度,第二个参数指定要在该字段宽度中写出的字符(或字符串、整数等)。
printf
返回写入输出流的字符总数。
之后的一个数字 %
指定字段宽度;所以 %5c
将打印 4 个空格,后跟字符参数,总共 5 个字符。
*
指定字段宽度作为参数提供 printf
. 。所以这将打印一个字段 x
字符,后跟另一个 y
人物。每个字段由空格和后跟回车符组成 ('\r'
),所以不应该有任何可见的输出。 printf
返回打印的字符总数 - 在本例中, x+y
.
我同意 leeduhem 的观点,它非常聪明,
printf()
返回它打印的字符数。对于这个论点,我认为用一个例子更容易理解:(你也可以看到宽度技巧 这里:
#include <iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
int main() {
// your code goes here
int x = printf("%*c", 100, '\r');
printf("%d\n", x);
return 0;
}
x 是您为特定宽度设置的任何值(例如,它是 100)
这意味着您指定的宽度实际上是由 printf()
但我认为这 add()
只能与正数对决,如果其中一个数字<=0,该方法应该失败,你可以尝试 add(-3,-4)
, ,在我自己的机器上它仍然打印 7...