Как вызов 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...