elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda básica sobre C:
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda básica sobre C:  (Leído 3,288 veces)
Error 404:

Desconectado Desconectado

Mensajes: 58



Ver Perfil
Duda básica sobre C:
« en: 8 Septiembre 2014, 23:22 pm »

Hola a todos, veréis, en el manual que estoy leyendo sobre C, viene todo muy bien explicado y eso, pero hay un detalle que se han saltado, y que me tiene bastante confuso. Cuando ponen por ejemplo:
Código
  1. printf(%2d! = %ld\n”,i, factorial( i ) );
  2.  
Lo que no entiendo para qué sirve es el 2 y el 1 que hay delante de la "d" y detrás del "%".
Me ha pasado bastantes veces, no solo en este caso, siempre en los printf en los que se pone el signo "%", lo que hay detrás me confunde un poco.
No me malinterpreten, se que la "d" por ejemplo es para un número entero, pero no los números, y otras letras que se ponen en ocasiones, creo que la "s" es para una cadena no??
Si me pudieran explicar esto un poco os lo agradecería muchísimo.
Un saludo.


En línea

Si se puede imaginar, se puede programar.
netdrag0n

Desconectado Desconectado

Mensajes: 7



Ver Perfil
Re: Duda básica sobre C:
« Respuesta #1 en: 8 Septiembre 2014, 23:40 pm »

El 2 se refiere a la cantidad de numeros a mostrar ej 8885 va mostrar 88 nada mas  ,

%d o %i for int // enteros

%c para character // caracteres

%f para  float

%lf para double

%s para string

%x para hexadecimal

%ox para  octal


En línea

Error 404:

Desconectado Desconectado

Mensajes: 58



Ver Perfil
Re: Duda básica sobre C:
« Respuesta #2 en: 8 Septiembre 2014, 23:57 pm »

ah vale, muchas gracias, y cual sería la diferencia entre mostrar string y mostrar caracteres?? :huh:
Es decir, string por ejemplo podría ser una frase cualquiera no?? Yo algunas cosillas que he programado en c++ y lo que he aprendido en conclase, para las frases y demás utilizaba el tipo char, aunque más tarde me entere del tipo string en este foro, y me dijeron que era más correcto, por eso me gustaría saber la diferencia. Muchas gracias por la ayuda. :)
En línea

Si se puede imaginar, se puede programar.
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duda básica sobre C:
« Respuesta #3 en: 9 Septiembre 2014, 00:24 am »

Lo que no entiendo para qué sirve es el 2 y el 1 que hay delante de la "d" y detrás del "%".
El valor entero inmediatamente después del carácter '%' indica la anchura del campo con una alineación (predeterminada) a la derecha con el propósito de permitir una impresión en columnas.

Por ejemplo con este programa:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. int main(void)
  6. {
  7.   char *test[] = {
  8.      "a",
  9.      "bb",
  10.      "ccc",
  11.      "dddd"
  12.   };
  13.   size_t num_elem = sizeof test / sizeof test[0];
  14.   size_t i;
  15.  
  16.   for (i = 0; i < num_elem; i++)
  17.      printf("%5s %5d\n", test[i], (int) (i * pow(10, i)));
  18.  
  19.   return EXIT_SUCCESS;
  20. }
Se genera la salida:
Código:
    a     0
   bb    10
  ccc   200
 dddd  3000

Puedes encontrar mas ejemplos mediante el motor de búsqueda de los foros.

----

El 2 se refiere a la cantidad de numeros a mostrar ej 8885 va mostrar 88 nada mas
No. Si los caracteres generados sobrepasan la anchura del campo se imprimen tal cual, como si la anchura nunca se hubiera indicado.

----

cual sería la diferencia entre mostrar string y mostrar caracteres?
"%c" imprime un carácter mientras que "%s" imprime una cadena (secuencia de caracteres terminada con el carácter '\0'). Por ejemplo:
Código
  1. char ch = 'X';
  2. char str[] = "Hola";
  3.  
  4. printf("%s %c\n", str, ch); /* Imprime "Hola X" */

Yo algunas cosillas que he programado en c++ y lo que he aprendido en conclase, para las frases y demás utilizaba el tipo char, aunque más tarde me entere del tipo string en este foro, y me dijeron que era más correcto, por eso me gustaría saber la diferencia.
En el titulo del tema indicas que el lenguaje es C con "Duda básica sobre C:" pero ahora indicas que es C++, en el caso de este ultimo lo políticamente correcto es enfocarse en su biblioteca estándar: clase string, operadores ">>"/"<<" de las clases de entrada/salida, etc.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Duda básica sobre C:
« Respuesta #4 en: 9 Septiembre 2014, 09:07 am »

Yo algunas cosillas que he programado en c++ y lo que he aprendido en conclase, para las frases y demás utilizaba el tipo char, aunque más tarde me entere del tipo string en este foro, y me dijeron que era más correcto, por eso me gustaría saber la diferencia

Un "string" al estilo C puede estar definido de las siguientes maneras:

Código
  1. // Opción 1
  2. // Cadena de sólo lectura. Modificar su contenido puede provocar fallos en la aplicación.
  3. char *cadena = "Una frase cualquiera";
  4.  
  5. // Opción 2
  6. // Cadena de tamaño dinámico. Es la opción más flexible aunque puede provocar fugas de memoria
  7. // si no se hace con cuidado.
  8. char *cadena = malloc( x );
  9.  
  10. // Opción 3
  11. // Cadena de longitud fija. Es un diseño demasiado rígido ya que no te permite adaptarte.
  12. // Es esa longitud y punto, no hay más.
  13. char cadena[20];

C++ proporciona la clase "string", esta clase te proporciona la misma funcionalidad que el segundo caso con la ventaja de despreocuparte por el uso de memoria, es decir, te olvidas de malloc, free y realloc:

Un ejemplo en C:

Código
  1. char * cadena = malloc( 10 );
  2. strcpy( cadena, "123456789" );
  3. printf( "%s\n", cadena );
  4.  
  5. cadena = realloc( cadena, 20 * sizeof(char) );
  6. strcat( cadena, "0123456789" );
  7. printf( "%s\n", cadena );
  8.  
  9. free( cadena );

Equivalente en C++:
Código
  1. std::string cadena;
  2. cadena = "123456789";
  3. std::cout << cadena << std::endl;
  4.  
  5. cadena += "0123456789";
  6. std::cout << cadena << std::endl;

C++ te permite no "reinventar la rueda" cada dos por tres. Esto es a costa de delegar en las clases parte de la funcionalidad. Esto tiene la ventaja de que hay que escribir menos código y éste es menos propenso a errores... la parte negativa es que el código resultante es más lento. Eso sí, dudo mucho que seas capaz de notar la diferencia de velocidad a simple vista entre las dos versiones.
En línea

Error 404:

Desconectado Desconectado

Mensajes: 58



Ver Perfil
Re: Duda básica sobre C:
« Respuesta #5 en: 9 Septiembre 2014, 11:12 am »

Vale, muchas gracias a todos, ya me ha quedado bastante más claro ;-)
En línea

Si se puede imaginar, se puede programar.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda MUY BASICA sobre los registros en Ensamblador
Ingeniería Inversa
ferk93 3 6,113 Último mensaje 2 Junio 2008, 16:51 pm
por ferk93
Tengo una duda basica sobre Fisica.. « 1 2 3 4 »
Foro Libre
$Edu$ 30 14,098 Último mensaje 31 Marzo 2012, 09:05 am
por WifliX
Duda básica sobre redes
Redes
MCLucro 2 2,573 Último mensaje 15 Agosto 2014, 20:58 pm
por chauder92
Duda básica sobre fuentes
Electrónica
Sputnik_ 7 5,040 Último mensaje 8 Febrero 2016, 20:15 pm
por Minusfour_cierralo_o_baneamefull
Duda básica sobre constantes de física... « 1 2 »
Foro Libre
Eleкtro 10 6,190 Último mensaje 20 Abril 2017, 21:15 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines