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.... :( :(
#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];
for(n=0; n<=5; 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);
}
punt_max = name[0].puntuacion;
strcpy (mej_jug, name[0].nombre);
punt_min = name[0].puntuacion;
strcpy (men_jug, name[0].nombre);
for(n=0; n<=5; 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);
}
}
printf("\n\nEl mejor resultado lo ha obtenido %s con una puntuacion de %d puntos.", punt_max, mej_jug);
printf("\n\nEl peor resultado lo ha obtenido %s con una puntuacion de %d puntos.", punt_min, men_jug);
fflush(stdin);
printf("\nPresione Intro para finalizar...\n\n");
getchar();
}
#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);
ValLongA = ValLongB;
DistDiamA = DistDiamB;
Algoritmo(ValLongB, DistDiamB);
}
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 = Longitud / Diametro;
printf("\nEl valor de PI para esos valores es...\n\n");
printf("%f", PI);
fflush(stdin);
printf("\nPresione Intro para finalizar...\n\n");
getchar();
}
Espero que puedan decirme que falla :-\ :-\
Gracias y Saludos.
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 :¬¬ :¬¬
fflush(stdin);
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
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
#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();
}
#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;
}
Cita de: 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.
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... printf("\n\nEl mejor resultado lo ha obtenido %s con una puntuacion de %d puntos.", punt_max, mej_jug);
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... printf("\n\nEl mejor resultado lo ha obtenido %s con una puntuacion de %d puntos.", mej_jug, punt_max);
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 ;-) ;-)
Una pequeña aclaracion: eso es C, no C++.
Cita de: MeCraniDOS en 24 Febrero 2013, 20:04 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...
printf("\n\nEl mejor resultado lo ha obtenido %s con una puntuacion de %d puntos.", punt_max, mej_jug);
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...
printf("\n\nEl mejor resultado lo ha obtenido %s con una puntuacion de %d puntos.", mej_jug, punt_max);
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..
Citarint 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,
void Medida(int& Val, int& Dist)
reciba los parámetros por referencia, para poder modificarlos.
después esto,
_PI = (float)((float)Longitud/(float)Diametro);
olvidate , es sólo figurativo
hasta luego
Vale Vale, muchas gracias, otra cosa, vi que pusiste esto: // MessageBox(0,0,0,0);
Y que me dijiste esto:
CitarTe 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 ;-)
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)
Cita de: 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.
Están puestas en lo que yo he posteado... :)
Cita de: MeCraniDOS en 10 Marzo 2013, 13:50 PM
Vale Vale, muchas gracias, otra cosa, vi que pusiste esto:
// 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
Cita de: 85 en 15 Marzo 2013, 03:11 AM
AH faltaba decir que incluyas windows.h ;-)
Vale, ahora si, muchas gracias ;-) ;-)
Saludos