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 - eferion

#351
Programación C/C++ / Re: Problema con Dev C++
26 Junio 2014, 12:07 PM
Has comprobado que el ejecutable se haya creado de verdad??

Si es así me da que se ha podido desconfigurar el proyecto y el IDE no es capaz de encontrar el ejecutable.

Por cierto ¿por qué usar conio.h? Parece que diesen regalos por usar esta librería...
#352
Programación C/C++ / Re: Ayuda!
26 Junio 2014, 08:35 AM
Cita de: Eternal Idol en 26 Junio 2014, 08:14 AM
El path esta mal, no mire nada mas ya que eso salta a la vista, la \ se usa para secuencias de escape, la que corresponde usar en tu caso es \\ .

Confiaba en que al ver que no se abrían los archivos, investigase un poco el tema y acabase viendo lo de las barras el solo.
#353
Intuyo que estás usando C++... comprobar valores duplicados es tan sencillo como:

opción 1:

Código (cpp) [Seleccionar]

std::vector< int > poderesUsados;
int poder;

// Comprobar si ya está usado el poder
// std::find esta en el include "algorithm"
auto it = std::find( poderesUsados.begin( ), poderesUsados.end( ), poder );
if ( it == poderesUsados.end( ) )
{
  // No se ha usado el poder todavía
 
  // marcamos el poder como usado
  poderesUsados.push_back( poder );
}


opción 2:

Código (cpp) [Seleccionar]

std::set< int > poderesUsados;

// da igual que usemos el mismo poder 20 veces... al final solo quedará un solo uso por cada poder:
poderesUsados.insert( 1 );
poderesUsados.insert( 2 );
poderesUsados.insert( 1 );
poderesUsados.insert( 1 );

// Imprimira: 1 2
for( auto it = poderesUsados.begin( ); it != poderesUsados.end( ); ++it )
  cout << *it << " ";


Opción 3:

Hay infinitas formas, yo te he mostrado dos diferentes.
#354
Programación C/C++ / Re: Ayuda!
25 Junio 2014, 21:59 PM
1. O usas los mecanismos de entrada salida de C (printf, scanf) o los de C++ (cin, cout)... pero por favor, no los mezcles. Puede dar problemas.

2. No uses conio.h... más información al respecto aqui

3. No uses variables globales. Muy pocas veces es necesario su uso. Además hay que tener cuidado con ellas, pueden ser problemáticas y dificultan la lectura del código.

4. ¿Y si no se ha podido abrir el fichero?

doc = fopen("C:\Users\HERNAN\Desktop\prueba.txt","r");
while(i<=5)
w=getc(doc); // Y si doc == NULL???


Te faltan comprobaciones ahí.

5. Si un if, un else, un while o un do-while ocupan más de una línea hay que usar llaves:

while(i<=5)
w=getc(doc);
if (w =='\n') printf ("\n");
else
printf("%c",w);


Ese código se va a quedar atascado en las dos primeras líneas. Como no hay llaves el while afecta únicamente a w=getc(doc).

Además, aunque pusieses llaves no estás incrementando i... luego seguirías en un bucle sin fin que finalizaría con error al terminar de leer todo el archivo.

6. Los nombres de las variables salen gratis... pon nombres que te den una idea de la función de dicha variable.

No es lo mismo:
if ( i > j || x < w )

que:
if ( velocidad > velocidadMaxima || fechaITV < hoy )

Seguro que con la segunda opción es más facil hacerse una idea de qué es lo que hace el código.

Puede que haya algún otro error... pero como tienes que darle un repaso serio al programa no merece la pena seguir mirando.
#355
Una vez conoces la base del lenguaje no se trata tanto de leer sino de hacer cosas.

Plantéate retos cada vez más complejos:

* Una aplicación cliente servidor
* Una aplicación con interfaz gráfica
* Haz tus pinitos con SDL
* Intenta diseñar un sistema de cifrado

...

El caso es que al resolver este tipo de ejercicios te vas a ir encontrando con problemas... y al buscar las soluciones concretas a esos problemas es cuando vas a dar con documentación que ni sabías que estaba ahí... pero claro, llegar a ese punto sin sufrir no te va a aportar ningún conocimiento.
#356
Solo un pequeño detalle:


// ...

    switch (tipo_juego) {
           case '1' : maxrand = 15;
           break;
           case '2' : maxrand = 30;
           break;
           case '3' : maxrand = 50;
           break;
           default : exit(0);
           break;
    }

    // ...

    num_oculto = rand() % maxrand; // Genera num


Eso va a generar números en los rangos:


  • 0 - 14
  • 0 - 29
  • 0 - 49

Que no coinciden con los que estás indicando al usuario.
#357
Cita de: 011632 en 25 Junio 2014, 16:53 PM
Ya he puesto lo que me digiste y sigo teniendo el mismo problema, aqui esta de nuevo el codigo.

Esa respuesta es un poco vaga, no crees??

Si quieres o tienes que meterte en el mundillo de la programación tienes que ponerte un poco las pilas y leer los mensajes de error que van saliendo... con un poco de práctica hasta llegarás a entenderlos. Pero desde luego corregir el primer error y decir "sigo teniendo el mismo problema"... eso no.

Si por problema te refieres a que no compila... mala suerte, eso no es un problema; es el resultado de una serie de errores en tu código... ese es el verdadero problema... y desde luego cada uno de esos problemas requerirá una solución diferente.

Esto te lo digo porque como vayas con esa actitud durante un tiempo la gente se cansará de ayudarte. La gente tiene la mala costumbre de pedir un poco de entusiasmo y esfuerzo... somos así de raros :)
#358
En primer lugar, te recomiendo que para el código uses las etiquetas GeSHi... así aparecerá presentado de forma más legible.

Así a bote pronto, veo un problema y una cosa a mejorar:

Problema:
El include debe ir precedido de una almohadilla... sin almohadilla la línea no es válida.

Mejora:
el scanf lo usas con el parámetro %i. %i puede darte resultados inesperados porque interpreta la base del número en base a su formato:

  • 17 -> base 10 -> 17 en base 10
  • 017 -> base 8 -> 15 en base 10
  • 18 -> base 10 -> 18 en base 10
  • 018 -> base 8 -> número no válido

En estos casos casi es mejor usar %d. %d asume que el número va a ser introducido en base 10, con lo que:


  • 17 -> base 10 -> 17 en base 10
  • 017 -> base 10 -> 17 en base 10
  • 18 -> base 10 -> 18 en base 10
  • 018 -> base 10 -> 18 en base 10


#359
Al compilar no puede darte violación de segmento. Una violación de segmento se provoca cuando, mediante un puntero, intentas acceder a memoria no válida. Durante la compilación se escribe el programa... y salvo que el compilador tenga errores dudo que de errores de segmentación.

En tal caso el problema lo tienes durante la ejecución de tu programa... así a bote pronto si pulsas 5 veces la opción 1 empezarás a acceder a memoria que no te pertenece, luego no sería de extrañar que ahí esté el origen de tu problema.
#360
No se hacen tareas.

Si lo que necesitas es alguna guía que te inicie en la gestión de strings, aquí te paso un tutorial de strings en C.

Un saludo.