Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: MeCraniDOS en 24 Febrero 2013, 19:23 pm



Título: [?] Problemas con código en C++
Publicado por: MeCraniDOS en 24 Febrero 2013, 19:23 pm
Hola, quería preguntar que errores tienen estos códigos en C++, están escritos por mi, y aunque el compilador no me saca ningun fallo, me falla algo porque el programa rompe....  :( :(

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. struct TJugadores
  6. {
  7.  
  8.       char nombre[75];
  9.       int puntuacion;      
  10.  
  11. };
  12.  
  13. int main(void)
  14. {
  15.  
  16.    struct TJugadores name[6];
  17.    int n;
  18.    int punt_max;
  19.    int punt_min;
  20.    char mej_jug[75];
  21.    char men_jug[75];
  22.  
  23.  
  24.    for(n=0; n<=5; n++)
  25.  
  26.    {
  27.  
  28.    printf("\nEscribe el nombre del jugador %d: ", n+1);  //Nombre del jugador
  29.    gets(name[n].nombre);
  30.    fflush(stdin);
  31.    printf("\nEscribe la puntuacion: ");                  //Puntuación del jugador
  32.    scanf("%d",&name[n].puntuacion);
  33.    fflush(stdin);
  34.  
  35.    }
  36.  
  37.    punt_max = name[0].puntuacion;
  38.    strcpy (mej_jug, name[0].nombre);
  39.    punt_min = name[0].puntuacion;
  40.    strcpy (men_jug, name[0].nombre);  
  41.  
  42.    for(n=0; n<=5; n++)
  43.  
  44.    {
  45.  
  46.    if (name[n].puntuacion > punt_max)
  47.  
  48.    {
  49.  
  50.    punt_max = name[n].puntuacion;
  51.    strcpy (mej_jug, name[n].nombre);
  52.  
  53.    }
  54.  
  55.    if (name[n].puntuacion < punt_min)
  56.  
  57.    {
  58.  
  59.    punt_min = name[n].puntuacion;
  60.    strcpy (men_jug, name[n].nombre);
  61.  
  62.    }
  63.  
  64.    }
  65.  
  66.    printf("\n\nEl mejor resultado lo ha obtenido %s con una puntuacion de %d puntos.", punt_max, mej_jug);
  67.    printf("\n\nEl peor resultado lo ha obtenido %s con una puntuacion de %d puntos.", punt_min, men_jug);
  68.  
  69.    fflush(stdin);
  70.    printf("\nPresione Intro para finalizar...\n\n");
  71.    getchar();
  72. }

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void Medida(int Val, int Dist);
  5. void Algoritmo(int Longitud, int Diametro);
  6.  
  7. int main(void)
  8.  
  9. {
  10.  
  11.    int ValLongA;
  12.    int DistDiamA;
  13.  
  14.    int ValLongB;
  15.    int DistDiamB;
  16.  
  17.    Medida(ValLongA, DistDiamA);
  18.  
  19.    ValLongA = ValLongB;
  20.    DistDiamA = DistDiamB;
  21.  
  22.    Algoritmo(ValLongB, DistDiamB);
  23.  
  24.  
  25. }
  26.  
  27. void Medida(int Val, int Dist)
  28. {
  29.  
  30.     printf("\n\nIntroduzca la longitud de la circumerencia: ");
  31.     scanf("%d", &Val);
  32.     printf("\n\nIntroduzca el diametro de la circumerencia: ");
  33.     scanf("%d", &Dist);    
  34.  
  35.  
  36. }
  37. void Algoritmo(int Longitud, int Diametro)
  38. {
  39.  
  40.     float PI;
  41.  
  42.     PI = Longitud / Diametro;
  43.  
  44.     printf("\nEl valor de PI para esos valores es...\n\n");
  45.     printf("%f", PI);
  46.  
  47.     fflush(stdin);
  48.     printf("\nPresione Intro para finalizar...\n\n");
  49.     getchar();    
  50.  
  51.  
  52. }


Espero que puedan decirme que falla  :-\ :-\

Gracias y Saludos.


Título: Re: [?] Problemas con código en C++
Publicado por: MeCraniDOS en 24 Febrero 2013, 19:35 pm
En el ultimo se donde la he cagado, pero no se porque rompe, el valor de PI no me dará 3.14... porque estoy cogiendo dos valores aleatorios  :laugh: :laugh:, pero en teoría me tendría que salir el resultado de la división  :¬¬ :¬¬


Título: Re: [?] Problemas con código en C++
Publicado por: naderST en 24 Febrero 2013, 19:43 pm
Código
  1. fflush(stdin);
  2.  

El comportamiento para esta llamada no está definido ya que fflush es ÚNICAMENTE para flujos de salida.

http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html


Título: Re: [?] Problemas con código en C++
Publicado por: 85 en 24 Febrero 2013, 19:52 pm

Tus códigos tienen ciertas faltas un tanto inocentes, pero se nota que estás aprendiendo, por eso te las arreglé para que funcionen tus programas.
Igualmente me puse a depurar algo que en realidad eran errores fáciles como ser un %d por un %s , pero eso dije faltas un tanto inocentes XD

Código:
#include <stdio.h>
#include <stdlib.h>
 
void Medida(int& Val, int& Dist);
void Algoritmo(int Longitud, int Diametro);
 
int main(void)
{
    int ValLongA;
    int DistDiamA;
    int ValLongB;
    int DistDiamB;
    Medida(ValLongA, DistDiamA);
    ValLongB = ValLongA;
    DistDiamB = DistDiamA;
    Algoritmo(ValLongB, DistDiamB);
return 0;
}
 
void Medida(int& Val, int& Dist)
{
     printf("\n\nIntroduzca la longitud de la circumerencia: ");
     scanf("%d", &Val);
     printf("\n\nIntroduzca el diametro de la circumerencia: ");
     scanf("%d", &Dist);
}

void Algoritmo(int Longitud, int Diametro)
{
     float _PI;
     _PI = (float)((float)Longitud/(float)Diametro);
     printf("\nEl valor de PI para esos valores es...\n\n");
     printf("PI: %f\n", _PI);
     fflush(stdin);
     printf("\nPresione Intro para finalizar...\n\n");
     getchar();
}


Código:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
struct TJugadores
{
char nombre[75];
    int puntuacion;
};
 
int main(void)
{
    struct TJugadores name[6];
    int n;
    int punt_max;
    int punt_min;
    char mej_jug[75];
    char men_jug[75];
const int cant=2;
 
 
    for(n=0; n<cant; n++)
    {
printf("\nEscribe el nombre del jugador %d: ", n+1);  //Nombre del jugador
gets(name[n].nombre);
fflush(stdin);
printf("\nEscribe la puntuacion: "); //Puntuación del jugador
scanf("%d",&name[n].puntuacion);
fflush(stdin);
    }

// MessageBox(0,0,0,0);
 
    punt_max = name[0].puntuacion;
    strcpy (mej_jug, name[0].nombre);
    punt_min = name[0].puntuacion;
    strcpy (men_jug, name[0].nombre);   
 
// MessageBox(0,0,0,0);
 
    for(n=0; n<cant; n++)
    {
if (name[n].puntuacion > punt_max)
{
punt_max = name[n].puntuacion;
strcpy (mej_jug, name[n].nombre);
}
 
if (name[n].puntuacion < punt_min)
{
punt_min = name[n].puntuacion;
strcpy (men_jug, name[n].nombre);
}
    }
 
// MessageBox(0,0,0,0);
 
    printf("\n\nEl mejor resultado lo ha obtenido %d con una puntuacion de %s puntos.", punt_max, mej_jug);
    printf("\n\nEl peor resultado lo ha obtenido %d con una puntuacion de %s puntos.", punt_min, men_jug);
    fflush(stdin);
    printf("\nPresione Intro para finalizar...\n\n");
    getchar();
return 0;
}



Título: Re: [?] Problemas con código en C++
Publicado por: MeCraniDOS en 24 Febrero 2013, 20:04 pm
Tus códigos tienen ciertas faltas un tanto inocentes, pero se nota que estás aprendiendo, por eso te las arreglé para que funcionen tus programas.

Si, hace poco mas de un mes que estoy con el C++, muchas gracias por las soluciones, ahora lo cambio e intentaré entender las modificaciones.

En el código de los jugadores, lo único que falle fue en la tontería que me dijiste...


Código
  1.    printf("\n\nEl mejor resultado lo ha obtenido %s con una puntuacion de %d puntos.", punt_max, mej_jug);
  2.    printf("\n\nEl peor resultado lo ha obtenido %s con una puntuacion de %d puntos.", punt_min, men_jug);

Y tendría que ser asi...

Código
  1.    printf("\n\nEl mejor resultado lo ha obtenido %s con una puntuacion de %d puntos.", mej_jug, punt_max);
  2.    printf("\n\nEl menor resultado lo ha obtenido %s con una puntuacion de %d puntos.", men_jug, punt_min);

Pero el de PI no entiendo la modificación.... Pero aun así gracias  ;-) ;-)


Título: Re: [?] Problemas con código en C++
Publicado por: 0xDani en 24 Febrero 2013, 20:10 pm
Una pequeña aclaracion: eso es C, no C++.


Título: Re: [?] Problemas con código en C++
Publicado por: 85 en 24 Febrero 2013, 21:46 pm
Si, hace poco mas de un mes que estoy con el C++, muchas gracias por las soluciones, ahora lo cambio e intentaré entender las modificaciones.

En el código de los jugadores, lo único que falle fue en la tontería que me dijiste...


Código
  1.    printf("\n\nEl mejor resultado lo ha obtenido %s con una puntuacion de %d puntos.", punt_max, mej_jug);
  2.    printf("\n\nEl peor resultado lo ha obtenido %s con una puntuacion de %d puntos.", punt_min, men_jug);

Y tendría que ser asi...

Código
  1.    printf("\n\nEl mejor resultado lo ha obtenido %s con una puntuacion de %d puntos.", mej_jug, punt_max);
  2.    printf("\n\nEl menor resultado lo ha obtenido %s con una puntuacion de %d puntos.", men_jug, punt_min);

Pero el de PI no entiendo la modificación.... Pero aun así gracias  ;-) ;-)

Na en realidad, yo no te digo que son tonterías eso le pasa a cualquiera. Te conviene practicar la depuración de programas. No es necesario el windbg para hacerlo, se puede seguir la ejecución de un programa usando un mísero MessageBox o un printf+pause, cualquier cosa que te muestre por pantalla la situación del programa.

Con respecto al primer programa, estas dos asignaciones estaban invertidas y fueron arregladas..

Citar
int main(void)
{
    int ValLongA;
    int DistDiamA;
    int ValLongB;
    int DistDiamB;
    Medida(ValLongA, DistDiamA);
    ValLongB = ValLongA;
    DistDiamB = DistDiamA;

    Algoritmo(ValLongB, DistDiamB);
   return 0;
}

Lo que también se hizo fue hacer que,
Código
  1. void Medida(int& Val, int& Dist)

reciba los parámetros por referencia, para poder modificarlos.

después esto,
Código
  1. _PI = (float)((float)Longitud/(float)Diametro);

olvidate , es sólo figurativo

hasta luego



Título: Re: [?] Problemas con código en C++
Publicado por: MeCraniDOS en 10 Marzo 2013, 13:50 pm

Vale Vale, muchas gracias, otra cosa, vi que pusiste esto:

Código
  1. // MessageBox(0,0,0,0);

Y que me dijiste esto:

Citar
Te conviene practicar la depuración de programas. No es necesario el windbg para hacerlo, se puede seguir la ejecución de un programa usando un mísero MessageBox

Pero cuando pongo lo del MessageBox(0,0,0,0); dice que no esta declarado, de que Liberia es ese comando??

Saludos
  ;-)


Título: Re: [?] Problemas con código en C++
Publicado por: leosansan en 10 Marzo 2013, 15:44 pm

No te olvides de usar las etiquetas GeSHi con C++, aunque el código sea en C. Es más fácil de seguirlo con colores.


Saluditos!. ...(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: [?] Problemas con código en C++
Publicado por: MeCraniDOS en 10 Marzo 2013, 16:13 pm

No te olvides de usar las etiquetas GeSHi con C++, aunque el código sea en C. Es más fácil de seguirlo con colores.


Están puestas en lo que yo he posteado... :)


Título: Re: [?] Problemas con código en C++
Publicado por: 85 en 15 Marzo 2013, 03:11 am
Vale Vale, muchas gracias, otra cosa, vi que pusiste esto:

Código
  1. // MessageBox(0,0,0,0);

Y que me dijiste esto:

Pero cuando pongo lo del MessageBox(0,0,0,0); dice que no esta declarado, de que Liberia es ese comando??

Saludos
 ;-)


Es una función de Windows. Cuando no conozcas una función de Windows tenés que buscarla en un lugar llamado MSDN.

Es fácil, en google ponés:

'MessageBox, MSDN' + ENTER

y te va a salir algo así:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms645505(v=vs.85).aspx

MessageBox ya te dije que la uso para depurar, porque tiene el efecto de detener el programa y mostrar información en pantalla.
Generalmente la podés usar para aplicaciones no de consola, porque en las de consola bastaría con uzar system("pause") como una de las formas para detener el programa y usar printf para mostrar información por pantalla.
Si tu intención es depurar tus programas, te recomiento DbgView (http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx) + OutputDebugString (http://msdn.microsoft.com/en-us/library/windows/desktop/aa363362(v=vs.85).aspx)

AH faltaba decir que incluyas windows.h  ;-)

88


Título: Re: [?] Problemas con código en C++
Publicado por: MeCraniDOS en 15 Marzo 2013, 16:08 pm

AH faltaba decir que incluyas windows.h  ;-)


Vale, ahora si, muchas gracias  ;-) ;-)

Saludos