¿Hay alguna forma de que printf() imprima correctamente una matriz (de flotantes, por ejemplo)?

3 minutos de lectura

avatar de usuario
lindelof

Creo haber leído detenidamente todo el printf() documentación pero no pudo encontrar ninguna manera de imprimir, digamos, los elementos de una matriz de 10 elementos de float(s).

Por ejemplo, si tengo

float[] foo = {1., 2., 3., ..., 10.};

Entonces me gustaría tener una sola declaración como

printf("what_do_I_put_here\n", foo);

Que imprimiría algo a lo largo de las líneas de:

1. 2. 3. .... 10.

¿Hay alguna manera de hacer eso en vainilla C?

  • yo uso algo como #define printarr(fmt, dat, len) for (int i = 0; i < len; i++) printf(fmt, dat[i]) y luego llamarlo con printarr("%.2f ", foo, (sizeof(foo) / sizeof(float)));

    – Dip switch

    9 de diciembre de 2011 a las 8:30

avatar de usuario
jackdoe

necesita iterar a través de los elementos de la matriz

float foo[] = {1, 2, 3, 10};
int i;
for (i=0;i < (sizeof (foo) /sizeof (foo[0]));i++) {
    printf("%lf\n",foo[i]);
}

o cree una función que devuelva sn apilados printf y luego lo imprime con

printf("%s\n",function_that_makes_pretty_output(foo))

avatar de usuario
escudriñar

Tienes que recorrer la matriz y printf() cada elemento:

for(int i=0;i<10;++i) {
  printf("%.2f ", foo[i]);
}

printf("\n");

Necesitas ir por un bucle:

for (int i = 0; i < sizeof(foo) / sizeof(float); ++i)
   printf("%f", foo[i]);
printf("\n");

  • En Fortran es posible usar un bucle do implícito. write(*,'(3d 3d 3d)')(i,i=1,12) imprimiría 4 líneas que contienen los dígitos del 1 al 12, 3 dígitos por línea. Donde cada dígito tomaría 3 caracteres de largo cuando se imprimiera. ¿Hay un equivalente en C para hacer esto?

    – Alejandro Cska

    7 de abril de 2018 a las 12:04


  • Parece que en el ciclo, solo usar

    – Harry

    24 de marzo de 2020 a las 3:09

  • ¿Intentaste esto? Los números están impresos sin separación, por lo que son ilegibles. Creo que también es una práctica común escribir sizeof(foo) / sizeof(foo[0]) por lo que si alguien algún día cambia la matriz de flotante a doble, por ejemplo, su cálculo de longitud aún funciona. Por lo general, solo defino una macro LENGTH (a).

    – Spike0xff

    26 de julio de 2021 a las 16:03


No creo que haya una forma de imprimir una matriz para usted en printf. La función “printf” no tiene idea de cuánto tiempo es su matriz.

C no es un lenguaje de programación orientado a objetos (POO). Entonces no puedes usar propiedades en OOP. P.ej. No hay propiedad .length en C. Por lo tanto, debe usar bucles para su tarea.

avatar de usuario
glennsl

Para ser honesto, todos son buenos, pero será más fácil o más eficiente si alguien usa n números de tiempo y los muestra en la salida. Así que prefiero que esta sea una buena opción. La variable de matriz no predefinida permite que el usuario defina y muestre el resultado. Como esto..

int main()
{
    int i,j,n,t;
int arry[100];
    scanf("%d",&n);
   for (i=0;i<n;i++)
   { scanf("%d",&t);
       arry[i]=t;
   }
for(j=0;j<n;j++)
    printf("%d",arry[j]);

return 0;
}

¿Ha sido útil esta solución?