In che modo la chiamata stampa () aggiunge numeri qui?
-
21-12-2019 - |
Domanda
Non capisco come questa chiamata printf()
sta funzionando per aggiungere due numeri.Il %*c
ha qualcosa a che fare con questo?
//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
}
.
per chiamare
printf("Sum = %d", add(3, 4));
.
Uscita
Sum=7
. Soluzione
Oh, questo è intelligente.
return printf("%*c%*c", x, '\r', y, '\r');
.
On Success, printf()
restituirà quanti carattere è stato stampato e "%*c", x, '\r'
Dicarlo per stampare caratteri x
(spazi x-1
seguiti da un \r
).Pertanto, printf("%*c%*c", x, '\r', y, '\r')
restituirà il numero di caratteri stampati, che è x+y
.
Guarda printf(3)
per ulteriori dettagli.
.
Nota:
Come sottolineato da @shole , questo int add(int x, int y)
funziona solo per x
e y
sono numeri interi non negativi .Ad esempio:
add(-1, 1) // gives 2 instead of 0
add(0, 1) // gives 2 instead of 1
. Altri suggerimenti
Quando è passato a printf
(o funzioni simili), %*c
significa che stai passando due parametri invece di uno.Il primo parametro specifica una larghezza del campo e il secondo carattere (o stringa, int, ecc.) Scrittura in quella larghezza del campo.
printf
restituisce il numero totale di caratteri scritti sul flusso di uscita.
Un numero dopo %
Specifica la larghezza del campo;Quindi %5c
stampierà 4 spazi, seguito dall'argomento carattere, dando un totale di 5 caratteri.
*
Specifica che la larghezza del campo è fornita come argomento a printf
.Quindi questo stampa un campo di caratteri x
, seguito da un altro dei caratteri y
.Ogni campo è composto da spazi seguiti da un carrello-ritorno ('\r'
), quindi non dovrebbe esserci alcuna output visibile.printf
restituisce il numero totale di caratteri stampati - in questo caso, x+y
.
Sono d'accordo con Leeduhem, è estremamente intelligente,
printf()
restituisce il numero di caratteri che ha stampato.
Per l'argomento, penso che sia più facile capire con un esempio: (anche puoi vedere il trucco della larghezza in qui :
#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 è qualsiasi valore impostato su specifica la larghezza (nell'eG, è 100)
Significa che la larghezza specifica è effettivamente contata e ritorna dal printf()
ma penso che questo add()
può solo duello con numeri positivi, se uno del numero è <= 0, il metodo dovrebbe fallire, è possibile provare add(-3,-4)
, nella mia macchina Stampa ancora 7 ...