سؤال

أنا لا أفهم كيف هذا 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
هل كانت مفيدة؟

المحلول

أوه، هذا ذكي.

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.

وأنا أتفق مع 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