Как вызов printf () добавляет сюда числа?
Я не понимаю, как этот вызов printf()
работает, чтобы сложить два числа. Имеет ли %*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
4 ответа:
О, это умно.
return printf("%*c%*c", x, '\r', y, '\r');
При успешном выполнении
printf()
вернет, сколько символов он напечатал, и"%*c", x, '\r'
скажет ему напечататьx
символов (x-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
означает, что вы передаете два параметра вместо одного. Первый параметр задает ширину поля, а второй-символ (или строку, int и т. д.) чтобы записать в этой ширине поля.
printf
возвращает общее количество символов, записанных в выходной поток.
Число после
%
задает ширину поля; таким образом,%5c
выведет 4 пробела, за которыми следует аргумент символа, дающий в общей сложности 5 символов.
*
указывает, что ширина поля предоставляется в качестве аргументаprintf
. Таким образом, будет выведено одно поле символовx
, за которым следует другое из символовy
. Каждое поле состоит из пробелов, за которыми следует возврат каретки ('\r'
), поэтому не должно быть никаких видимых выходных данных.printf
возвращает общее количество напечатанных символов. этот случай,x+y
.
Я согласен с лидухемом, он чрезвычайно умен,
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()
может быть только дуэль с положительными числами, если одно из чисел add(-3,-4), в моей собственной машине он все еще печатает 7...