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

#881
Es una implementación de la función gotoxy de la biblioteca conio de Borland.

En cuanto a una explicación de cada una de las partes lo mejor es consultar la documentación del fabricante:
Consoles
GetStdHandle
SetConsoleCursorPosition

Un saludo
#882
Programación C/C++ / Re: Ayuda Struct
7 Abril 2013, 19:53 PM
Revisando con cuidado utilizas la variable "ObjetosTotales" pero no la declaras en ninguno de los dos archivos.

Mejor publica el código fuente completo junto con las actualizaciones que hayas realizado.

Un saludo
#883
Programación C/C++ / Re: Ayuda Struct
7 Abril 2013, 19:13 PM
Déjame ver si entiendo correctamente:

1) El primer archivo se llama "Objeto.h" y su primera linea es:
#include "Bounding.h"

2) El segundo archivo se llama "Bounding.h" y su primera linea es:
#include "Objeto.h"

Si es así el problema es una dependencia circular: no puedes tener dos archivos donde cada uno incluya al otro.

Un saludo
#884
Programación C/C++ / Re: Ayuda Struct
7 Abril 2013, 18:52 PM
Te falto uno: "Objeto.h" incluye a "Bounding.h" y este a "idobjeto.h".

Un saludo
#885
Programación C/C++ / Re: Ayuda Struct
7 Abril 2013, 18:40 PM
¿Por favor puedes publicar el código fuente completo (por supuesto si no es muy largo)?

Con esos dos fragmentos lo único que se me ocurre es que revises el orden de las declaraciones (la declaración de "Bounding" debe encontrarse antes de la de "Objeto").

Un saludo
#886
Programación C/C++ / Re: Me tiene loco
7 Abril 2013, 18:27 PM
Cita de: avesudra en  7 Abril 2013, 14:16 PMLo de limpiar el buffer no es algo que me guste, lo veo chapucero, pero bueno...
Puedes evitarlo cambiando la llamada a scanf:
printf("Selecciona una opcio:\n");
scanf("%c",&opcio);

Por:
printf("Selecciona una opcio:\n");
scanf(" %c",&opcio);

Al utilizar " %c" el espacio le indica a la funcion que descarte todo espacio blanco, de forma similar a "%d", "%f", etc.

Un saludo
#887
Cita de: leosansan en  6 Abril 2013, 14:43 PMSólo me queda la duda de no introducir el caracter nulo al final de cada cadena.
No hay problema. Cuando se declara un array y se inicializa mediante una lista de valores:
char tok[40][6] = {{0}};
Los valores faltantes se toman como cero.

Cita de: leosansan en  6 Abril 2013, 14:43 PMP.D: Lo que no entiendo es a cuento de que vino el código que habías posteado anteriormente :silbar:
¿El primero? Me parecio un buen ejemplo del uso de un interruptor y punteros a funciones.

Cita de: 85 en  6 Abril 2013, 16:12 PM
rir usando macros para hacer el código más legible?  ;-)
No la veo mal. La alternativa era isdigit pero esta no garantiza el resultado uno o cero, se debe forzar y con ello el condicional (con macro):
if (IS_DIGIT(cad[i]) ^ IS_DIGIT(cad[i + 1])){
Termina así (con isdigit):
if (!!isdigit(cad[i]) ^ !!isdigit(cad[i + 1])){
En mi opinión demasiado forzado, a falta de opciones no queda mas (remedio) que utilizar la macro.

Un saludo
#888
Cita de: leosansan en  5 Abril 2013, 23:20 PM
Sería más corto con el uso de sscanf, pero no sería más simple ni en igualdad de condiciones respecto a los propuestos.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   char *cad = "01ab210c213qwe31zxc213";
   char tok[40][6] = {{0}};
   int i;
   int j;
   int nc;

   puts("01ab210c213qwe31zxc213");

   i = 0;
   while (
      sscanf(cad,  "%[0123456789]%n", tok[i], &nc) == 1 ||
      sscanf(cad, "%[^0123456789]%n", tok[i], &nc) == 1
   ){
      cad += nc;
      i++;
   }

   for (j = 0; j < i; j++)
      printf ("tok[%d] == %s\n", j, tok[j]);

   return 0;
}


A mi me parece aceptable (no hay nada realmente complicado).

----

Edito:

Por otra parte si la aproximación debe ser "simplicidad a rajatabla" (no me gusta ya que la biblioteca estándar esta para eso: para explotarla) podemos basarnos en una operación XOR:
#include <stdio.h>

#define IS_DIGIT(ch) ((ch) >= '0' && (ch) <= '9')

int main(void)
{
   char cad[] = "01ab210c213qwe31zxc213";
   char tok[40][6] = {{0}};
   int i;
   int j;
   int k;
   
   puts("01ab210c213qwe31zxc213");
   
   j = 0;
   k = 0;
   for (i = 0; cad[i] != '\0'; i++){
      tok[j][k] = cad[i];
     
      if (IS_DIGIT(cad[i]) ^ IS_DIGIT(cad[i + 1])){
         j++;
         k = 0;
      }else
         k++;
   }
   
   for (i = 0; i < j; i++)
      printf("tok[%d] == %s\n", i, tok[i]);
   
   return 0;
}


Por supuesto con las limitaciones que tiene el uso del array para almacenar los tokens: resultados incorrectos si se sobrepasa la capacidad del elemento (token) o del array en si.

----

Edito 2:

Cambie la versión utilizando sscanf por una ultima mas corta (y por supuesto mas fea). Y no tienen que preguntarme: ya no es tan aceptable (esto ultimo hay que tomarlo con un poco de humor).

Un saludo
#889
Cita de: cantabria1234 en  5 Abril 2013, 19:50 PMestoy aprendiendo de los errores, pero el programa sigue sin funcionar
Con solo eso no es posible ayudarte.

Mejor sigue la recomendación de 85:
Cita de: 85 en  5 Abril 2013, 21:25 PMdeberías postear el código actualizado, y hacerlo dentro de las etiquetas correspondientes

Un saludo
#890
Cita de: Schrödinger en  5 Abril 2013, 18:44 PMLo que no sé es porque como lo tenía yo no es correcto. ¿Podrías intentar explicármelo?
Tienes problemas con esa variable porque depende del compilador el tamaño del área donde se almacenan las variables locales (stack o pila).

Para evitarlo debes cambiar la clase de almacenamiento de la variable de automático (utiliza la pila) a estático (utiliza el montículo o heap). Para estos temas (heap y stack) lo mejor es revisar sitios con información de calidad como wikipedia.

Ese cambio se puede realizar de tres formas:

1) La ya mencionada, colocando la declaración fuera de toda función.
2) Utilizando un puntero y reservando el espacio de memoria mediante malloc, calloc o realloc.
3) Declarando el array dentro de la función y calificándolo con static.

Cita de: 85 en  5 Abril 2013, 21:15 PM
igualmente fijate, poné tu código en este compilador online de C/C++ y fijate que hay varios problemas
Lo que pasa es que lo estas compilando como C++, si lo compilas como C no se presentan esos errores (pero se presentan otros: cambiar la definición de main y la primera llamada a printf).

Un saludo