我不明白这是怎么回事 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) 作品 仅适用于两者 xy 是非负整数. 。例如:

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...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top