Frage

Ich verstehe nicht, wie das geht printf() Der Anruf arbeitet daran, zwei Nummern zu addieren.Tut das %*c etwas damit zu tun haben?

//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
}

für den Anruf

printf("Sum = %d", add(3, 4));

Ausgabe

Sum=7
War es hilfreich?

Lösung

Oh, das ist clever.

return printf("%*c%*c",  x, '\r',  y, '\r');

Auf Erfolg, printf() gibt zurück, wie viele Zeichen gedruckt wurden, und "%*c", x, '\r' Sagen Sie ihm, er soll drucken x Figuren (x-1 Leerzeichen gefolgt von einem \r).Daher, printf("%*c%*c", x, '\r', y, '\r') gibt zurück, wie viele Zeichen gedruckt werden x+y.

Sehen printf(3) für weitere Details.


Notiz:

Wie von hervorgehoben @shole, Das int add(int x, int y) funktioniert nur für beide x Und y sind nichtnegative ganze Zahlen.Zum Beispiel:

add(-1, 1) // gives 2 instead of 0
add(0, 1)  // gives 2 instead of 1

Andere Tipps

Bei Weitergabe an printf (oder ähnliche Funktionen), %*c bedeutet, dass Sie zwei Parameter statt einem übergeben.Der erste Parameter gibt eine Feldbreite an und der zweite ein Zeichen (oder String, Ganzzahl usw.), das in dieser Feldbreite geschrieben werden soll.

printf gibt die Gesamtzahl der in den Ausgabestream geschriebenen Zeichen zurück.

Eine Nummer danach % gibt die Feldbreite an;Also %5c gibt 4 Leerzeichen aus, gefolgt vom Zeichenargument, was insgesamt 5 Zeichen ergibt.

* Gibt an, dass die Feldbreite als Argument für bereitgestellt wird printf.Dadurch wird also ein Feld gedruckt x Zeichen, gefolgt von einem weiteren von y Figuren.Jedes Feld besteht aus Leerzeichen, gefolgt von einem Wagenrücklauf ('\r'), daher sollte es keine sichtbare Ausgabe geben. printf gibt die Gesamtzahl der gedruckten Zeichen zurück – in diesem Fall x+y.

Ich stimme Leeduhem zu, es ist äußerst clever,

printf() Gibt die Anzahl der gedruckten Zeichen zurück.Ich denke, dass das Argument anhand eines Beispiels leichter zu verstehen ist:(Sie können auch den Breitentrick sehen Hier:

#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 ist der Wert, den Sie zur Spezifizierung der Breite festlegen (im Beispiel ist es 100).

Das bedeutet, dass die von Ihnen angegebene Breite tatsächlich gezählt und zurückgegeben wird printf()

Aber ich denke das add() kann nur mit positiven Zahlen duellieren. Wenn eine der Zahlen <= 0 ist, sollte die Methode fehlschlagen. Sie können es versuchen add(-3,-4), auf meinem eigenen Gerät werden immer noch 7 gedruckt ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top