Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rir3760

#411
Cita de: yoel_alejandro en 24 Marzo 2014, 17:21 PMpreparé un sencillo código que abre el fichero como lectura, toma sus líneas y las escribe al fichero2, además imprime por pantalla lo que va leyendo para verificar como marcha del programa.
Dos recomendaciones:

* No hay necesidad de generar manualmente el mensaje de error, en su lugar se puede utilizar la función perror (prototipo en <stdio.h>).
* Ya que el valor de retorno de un programa en salida anormal es implementation defined es mejor utilizar la macro EXIT_FAILURE (definida en <stdlib.h>).

Cita de: yoel_alejandro en 24 Marzo 2014, 17:21 PMNota que al final imprime una línea vacía, ésto es porque el fichero está terminado en un return (un '\n'). Se podría eliminar ese defecto inspeccionando el contenido copiado al buffer.
Tal como esta el programa este no puede imprimir una linea en blanco salvo la obviedad de que el archivo de entrada ... tenga una linea en blanco al final de este.

Pero si la entrada es:
Hola
Mundo
Hugo Paco Luis

Entonces no hay forma de que el programa reporte cuatro lineas.

Otras dos observaciones:

* El uso de feof en el bucle es innecesario:
linea = 1;
while ( !feof (fichero) ) {
   if ( fgets ( buffer, 1001, fichero ) != NULL )
      printf ("Linea %d: \n\t%s", linea++, buffer );
}

Ya que no se recomienda el uso de feof (salvo contados escenarios) se puede eliminar esta reduciendo el bucle a:
linea = 1;
while (fgets(buffer, 1001, fichero) != NULL)
   printf("Linea %d: \n\t%s", linea++, buffer);


* En el programa falta la declaración de la variable "linea".

Un saludo
#412
Programación C/C++ / Re: Problema con cadena
25 Marzo 2014, 02:41 AM
Cita de: wiD^ en 24 Marzo 2014, 22:49 PMquisiera saber como almacenar todo esto:
Código (cpp) [Seleccionar]
printf("%c%d%c%d%c%d%c%d%c%d \n\n", letra[0], numero[0], letra[1], numero[1], letra[2], numero[2],
letra[3], numero[3], letra[4], numero[4]);


En una sola cadena o palabra.
Puedes utilizar sprintf. Un ejemplo:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   char cad[11];
   char letra[] = "ABCDE";
   int numero[] = {1, 2, 3, 4, 5};
   
   sprintf(
      cad,
      "%c%d%c%d%c%d%c%d%c%d",
      letra[0], numero[0],
      letra[1], numero[1],
      letra[2], numero[2],
      letra[3], numero[3],
      letra[4], numero[4]
   );
   printf("%s\n", cad);
   
   return EXIT_SUCCESS;
}


Pero se debe cuidar que el numero de caracteres generado no sobrepase la capacidad del array, si eso es un problema una mejor alternativa es snprintf (disponible a partir del estándar C99).

Un saludo
#413
Tienes que explicarte de una forma clara y precisa empezando por el lenguaje de programación que estas utilizando.

Si se trata de C y quieres leer una linea donde se combinan caracteres con números como "Saldo: 100, Total: 12345" puedes utilizar las funciones scanf, fscanf o sscanf dependiendo del origen de datos (entrada estándar, stream o cadena, respectivamente).

Un saludo
#414
Programación C/C++ / Re: funciones en c
24 Marzo 2014, 17:55 PM
Cita de: leosansan en 24 Marzo 2014, 08:35 AM
la segunda como la tienes parece una repetición de la primera. Supongo que lo que querías poner es:
variable = mifuncion();
if (variable == -1){
    perror("Error");
}
La segunda forma de sesiopower y la que publicas son equivalentes. Se utilizan cuando el valor de retorno de una función (o el resultado de alguna otra expresión) debe utilizarse posteriormente.

Un ejemplo común sucede con la función getchar. Por ejemplo si se deben procesar todos los caracteres de la entrada estándar contando su numero de lineas:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int ch;
   int nl; /* numero de lineas */
   
   nl = 0;
   while ((ch = getchar()) != EOF)
      if (ch == '\n')
         nl++;
   
   printf("%d\n", nl);
   
   return EXIT_SUCCESS;
}

En el ejemplo se debe almacenar en una variable el resultado de getchar ya que de no hacerlo no podríamos comparar este con '\n' (para contar el numero de lineas).

Un saludo
#415
Cita de: amchacon en 23 Marzo 2014, 17:28 PM¿Seguro? A mi siempre me lo coge con iostream.
Revisando el tema lo usual, como bien indicas, es que funcione pero para estar completamente seguros mejor incluir el encabezado.

Una discusión sobre ello en comp.lang.c++.moderated es Is the string header file required?.

Un saludo
#416
Cita de: Feynmann en 23 Marzo 2014, 16:03 PMNo me reconoce el string, y me obliga a crear una variable tal que char nombre[10] por ejemplo. ¿Que le falta a mi codigo?
Antes de utilizar la clase string debes incluir el encabezado correspondiente con:
Código (cpp) [Seleccionar]
#include <string>

Un saludo
#417
Cita de: NOB2014 en 18 Marzo 2014, 22:53 PM//Con uniones y campos de bit.

#include <stdio.h>

union caracteres
{
unsigned char c;
struct c_bits
{
unsigned b0:1;
unsigned b1:1;
unsigned b2:1;
unsigned b3:1;
unsigned b4:1;
unsigned b5:1;
unsigned b6:1;
unsigned b7:1;
} bits;
};
La mayoría de las características de los campos de bits son "implementation defined" eso mas el detalle de dar por sentado ocho bits por byte (lo usual pero pueden ser mas, mejor usar la macro CHAR_BIT de <limits.h>).

Para el caso la recomendación es utilizar toupper, tolower, etc. cortesía de <ctype.h>, portable y sencillo.

Un saludo
#418
Cita de: NOB2014 en 19 Marzo 2014, 13:59 PMde principio no entiendo que valores arrojan size_t i y size_t j  y para que el doble for
Eso ya lo explico de una forma mas que satisfactoria yoel_alejandro.

----

En cuanto al condicional:
if ( i > 0 && (i + 1)%8 == 0 )
eferion ya indico como acortarlo, solo agregar que (por consistencia) se debe utilizar la macro CHAR_BIT:
if ((i + 1) % CHAR_BIT == 0) ...

Un saludo
#419
Programación C/C++ / Re: \n y endl
20 Marzo 2014, 03:21 AM
Cita de: csp en 18 Marzo 2014, 23:26 PMMás allá de que la secuencia de escape no es portable
Es portable si se utiliza con un stream en modo texto (std::cout es uno de ellos) ya que la conversión entre '\n' y el carácter (o caracteres) que indiquen el avance de linea (por ejemplo '\r' + '\n',) se realiza de forma transparente.

La única diferencia es la mencionada por amchacon.

Un saludo
#420
Cita de: m@o_614 en 20 Marzo 2014, 01:44 AMotra duda: por qué en la linea

entero = operando-'0';

le ponen -'0' en vez de -48?
Porque el valor es el mismo pero '0' es mas claro.

Un saludo