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

#1551
Programación C/C++ / Re: limits.h
5 Agosto 2011, 03:27 AM
Una forma de acortar el programa es mediante una macro utilizando el operador '#' (para delimitar el argumento, en otras palabras convertirlo en cadena literal):
#include <stdio.h>
#include <stdlib.h>

#include <limits.h>
#include <float.h>

#define IMPRIMIR(macro, fmt)  printf(#macro ": " fmt "\n", macro)

int main (void)
{
   IMPRIMIR(INT_MIN, "% d");
   IMPRIMIR(INT_MAX, "% d");
   putchar('\n');
   
   IMPRIMIR(LONG_MIN, "% ld");
   IMPRIMIR(LONG_MAX, "% ld");
   putchar('\n');
   
   IMPRIMIR(FLT_MIN, "%e");
   IMPRIMIR(FLT_MAX, "%e");
   putchar('\n');
   
   /* ... */
   
   return EXIT_SUCCESS;
}


Un saludo
#1552
Cita de: greenchar en  4 Agosto 2011, 05:36 AMAprovechando este post tengo una pregunta más:
Hice un programa que pide un valor numérico, pero al introducir una letra, se vuelve a repetir (como si fuera un bucle infinito) ¿como puedo hacer una excepción para controlar eso?
Supongo por lo comentado que utilizas la función scanf para leer el valor. En ese caso se debe recordar que ella solo procesa los caracteres necesarios para la conversión, si esta falla los caracteres inválidos se quedan ahí (en el bufer de la entrada estándar).

Lo que debes hacer es verificar el valor de retorno de la función (esta es el numero de conversiones exitosas) y descartar el resto de la linea.

Por ejemplo:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int num;
   int ok;
   int ch;
   
   do {
      printf("Introduce un numero (1 a 9): ");
      fflush(stdout);
      ok = scanf("%d", &num) == 1 && num >= 1 && num <= 9;
     
      /* Descartamos el resto de la linea */
      while ((ch = getchar()) != EOF && ch != '\n')
         ;
   }while (!ok);
   
   printf("El numero es %d\n", num);
   
   return EXIT_SUCCESS;
}


Un saludo
#1553
Cita de: Synth3tik0 en  3 Agosto 2011, 23:31 PMcomo comento en el codigo si lo pongo entre using namespace std y main compila bien, pero si lo pongo en otro lugar no.. q pasa llevan orden?
No.

Los prototipos de las funciones no deben necesariamente ir en una parte determinada del programa.

Lo que si se debe cumplir es: deben estar colocados antes del uso (llamada) de la funcion correspondiente. Eso se cumple colocandolos (lo usual) antes de toda definicion.

Por ejemplo:
Código (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::cout;
// etc

// Prototipos de funciones

// Definicion de funciones empezando por la principal
int main()
{
// ...

return 0;
}

// Mas definiciones ...


Un saludo
#1554
Cita de: ANTRUCK en  3 Agosto 2011, 17:41 PMYa he revisado los libros que están publicado acá, La cosa es que "las versiones nuevas" están en ingles y los otros son muy viejos y pues ya no cumple con los standard,
El primer estándar de C es de 1989/1990 y es todavía el mas soportado, también debes considerar que un libro por el solo hecho de ser reciente no da garantías.

En cuanto al ingles te convendría aprenderlo ya que la gran mayoría de los libros/referencias/etc. están en ese lenguaje.

En mi opinión dos de los mejores libros para aprender C son "K&R2" y "Pointers on C" (los dos en ingles). También se requiere de mucho esfuerzo (no es ósmosis).

Un saludo
#1555
Programación C/C++ / Re: [C] GotoXY Error
3 Agosto 2011, 14:52 PM
Te conviene aprender primero las partes de C que están garantizadas (C estándar) y solo después las características especificas (extensiones) del compilador que estés utilizando.

Funciones como gotoxy y getch son parte de la biblioteca conio de Borland y su soporte depende del compilador. Eso en el caso de que el error (no lo mencionas) sea del tipo "undefined reference ...".

Un saludo
#1556
Programación C/C++ / Re: limits.h
3 Agosto 2011, 01:54 AM
Cita de: Treppe en  2 Agosto 2011, 15:01 PMHola, tengo un problema que no se porqué pasa, yo creo que es el compilador
En ese caso nos ayudarías como no tienes idea si nos indicas cual estas utilizando.

El único problema en potencia con el programa son los tipos "long long" y "unsigned long long" ya que estos fueron introducidos con el estándar C99. Debes revisar la documentación de tu compilador para saber si soporta esos tipos y que este configurado correctamente.

También debes utilizar "%lu" para imprimir la macro "ULONG_MAX".

Cita de: Treppe en  2 Agosto 2011, 15:01 PMEs como está en el libro, pero el valor de la variable "long long", a la hora de ejecutar el programa,  no corresponde con la uqe sale en el libro
Por esa razón se utilizan esas macros: los valores que se indican en un libro son los mínimos garantizados, los valores exactos dependen de la implementación.

Un saludo
#1557
Programación C/C++ / Re: Archivos y Stdarg
3 Agosto 2011, 01:35 AM
Cita de: Triper0 en  2 Agosto 2011, 20:27 PMUna cosa que no entiendo es la linea esta:

      entrada = fopen(va_arg(va, char const *), "r");

La parte de "char const *" sería como decirle que va a encontrar una constante de caracteres, o sea "FILE" y le asignas el '*'... ¿O algo así?...
No.

Se utiliza la macro "va_arg" para obtener cada uno de los argumentos sin nombre (los que sustituyen a "...", en tu caso los tres nombres de archivo).

El segundo argumento de "va_arg" debe ser el tipo, en tu caso utilizamos "char const *" ya que ese es el tipo de las literales de cadena como "a.txt".

Un saludo
#1558
Programación C/C++ / Re: ayuda c a c++
3 Agosto 2011, 01:03 AM
Cita de: a0xsys en  2 Agosto 2011, 22:17 PMUna pequeña observacion, tienes declaradas las variables 'op' y 'a' como variables de tipo char, cuando en realidad lo que almacenarán es un entero.
No. El uso de ambas variables es correcto ya que en ellas se almacenan caracteres para luego ser comparados en los casos contra las literales '1', '2', etc.

Un saludo
#1559
Programación C/C++ / Re: Nuevo y primera duda
2 Agosto 2011, 19:55 PM
No. Su pagina principal todavia lista la version 5.0 Beta (o 4.9.9.2, es la misma) como su ultima version y en su pagina en sourceforge tanto en codigo fuente como binarios esa es la ultima.

Tal vez se trate de una "rama" independiente. ¿Donde escuchaste eso?

Un saludo
#1560
Programación C/C++ / Re: Archivos y Stdarg
2 Agosto 2011, 19:44 PM
Tienes que darle un buen repaso a tu material de referencia ya que el programa tiene varios errores importantes y algunos de ellos de concepto.

Dentro de la función tratas de abrir los archivos cuando ya abriste estos en la función principal, también tratas a los objetos de tipo "FILE" (debería ser "FILE *") como cadenas de texto indicando el nombre de los archivos.

El programa corregido (compáralo con el original):
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

#define NOM_ARCHIVO_SALIDA  "concat.txt"

void concatenar(int num_elem, ...);

int main(void)
{
   concatenar(3, "a.txt", "b.txt", "c.txt");
   
   return EXIT_SUCCESS;
}

void concatenar(int num_elem, ...)
{
   FILE *entrada;
   FILE *salida;
   va_list va;
   int ch;
   
   va_start(va, num_elem);
   salida = fopen(NOM_ARCHIVO_SALIDA, "a");
   
   while (num_elem--){
      entrada = fopen(va_arg(va, char const *), "r");
     
      while ((ch = fgetc(entrada)) != EOF)
         fputc(ch, salida);
      fclose(entrada);
   }
   
   fclose(salida);
   va_end(va);
}


Un saludo