Pregunta

No entiendo cómo este printf() la llamada está trabajando para sumar dos números.¿El %*c tiene algo que ver con él?

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

para llamar a

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

Salida

Sum=7
¿Fue útil?

Solución

Oh, esto es inteligente.

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

En caso de éxito, printf() devuelve el número de caracteres impresos, y "%*c", x, '\r' dígale a imprimir x personajes (x-1 espacios seguido por uno \r).Por lo tanto, printf("%*c%*c", x, '\r', y, '\r') devuelve el número de caracteres impresos, que es x+y.

Ver printf(3) para obtener más detalles.


Nota:

Como se ha señalado por @shole, este int add(int x, int y) obras sólo para tanto x y y son números enteros no negativos.Por ejemplo:

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

Otros consejos

Cuando se pasa a printf (o funciones similares), %*c significa que estamos pasando dos parámetros en lugar de uno.El primer parámetro especifica un ancho de campo, y la segunda un carácter (o string, int, etc.) para escribir en la que la anchura del campo.

printf devuelve el número total de caracteres escritos en el flujo de salida.

Un número después de % especifica el ancho de campo;así %5c imprimir 4 espacios, seguido por el carácter del argumento, dando un total de 5 caracteres.

* especifica que el ancho de campo se proporciona como argumento para printf.Así que esta va a imprimir un campo de x caracteres, seguido por otro de y los caracteres.Cada campo se compone de espacios seguido por un retorno de carro ('\r'), por lo que no debería ser visible en la salida. printf devuelve el número total de caracteres impresos - en este caso, x+y.

estoy de acuerdo con leeduhem, es extremadamente inteligente,

printf() devolver el número de caracteres impresos.Para el argumento, creo que es más fácil de entender con un ejemplo:(También se puede ver el ancho de truco en aquí:

#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 es cualquier valor que se establece en específico de la anchura (en el por ejemplo, es 100)

Que significa que el ancho específicos es contado, y regreso por el printf()

Pero creo que esto add() sólo pueden duelo con números positivos, si el número es <= 0, el método falla, usted puede tratar de add(-3,-4), en mi propia máquina todavía de impresión 7...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top