Temas a tratar:
- El código siempre entre etiquetas GeSHi. Puedes seleccionarlas encima del cuadro de texto cuando estás escribiendo un mensaje.
- Lo de no usar <conio.h> ya te lo han comentado. Sustituye <getche()> por <getchar()> y adiós <conio.h>.
- La función <registro()> devuelve un <float>. No tiene ningún sentido si siempre va a devolver 0. Si quieres modificar un <Usuario> o haces que <registro()> devuelva un Usuario y se lo asignas a un Usuario en el <main> o pasas un <Usuario> por referencia para poder modificarlo y que los cambios se guarden.
- No sé si programas en C usando <iostream> o programas en C++ usando <gets>. Si estás con C++ usa un <string> para el nombre y <cin> para las entradas de datos. Si es C y tienes que usar <gets>, usa <fgets>.
void registro(Usuario &user){
cout << "Nombre: ";
fgets(user.nombre, 100, stdin);
cout << "Edad: ";
scanf("%d", &user.edad);
cout << "Registrado Usuario: " << user.nombre << " Edad: " << user.edad << endl;
}
En este trozo de código te dejo la respuesta a como concatenar variables con cadenas de texto usando <cout>.
- El uso de <while> no es este. <while> se usa para un bucle que se repite. Lo que tú quieres usar aquí es un simple <if>.
while(res == 'N' || res == 'n'){
cout<<"\n\nOk, que tenga un buen dia.";
return 0;
// Forma correcta
if(res == 'N' || res == 'n')
// todo lo demas
}
- En el caso de que la respuesta sea <S> más de lo mismo, se utiliza un <if> no un <while>. En tu caso con el <if> cuando hayas elegido una opción te pedirá otra y otra y otra y otra. Aunque bueno sólo tienes definida la primera opción (imagino que el resto no lo has puesto por no hacer el código más largo
)
- No uses <if> para comprobar las opciones. Usa un <switch>.
switch(opcion){
case 1:
// lo que sea si la opcion es 1
break;
case 2:
// lo que sea si la opcion es 2
break;
// asi con todas las opciones que tengas y finalmente
default:
// lo que sea si la opcion no es ninguna de las anteriores
break; // este es opcional
}
- Además y si a la primera pregunta no se responde ni <N> ni <S>?
. Se sale también pues entonces haz que si la respuesta es <S> se ejecute el resto del programa y sino, <else>, se salga y no uses tanto <if>.
- Siguiente trozo de código.
if(opcion == 1);{
cout<<"\nUsted quiere ver la de Venom..."<<endl;
if(regis.edad<18){
cout<<"Lo siento pero no puedes verla, esta bien grotesca para alguien como usted"<<endl;
}
else{
cout<<"Perfecto, son $40"<<endl;
}
return 0;
}
- El punto y coma que va después del <if> de fuera sobra.
- El problema de la edad ya está arreglado con el cambio que he hecho a la función <registro()>.
- Concatenar el valor de la constante ya te lo he mostrado también.
- Hacer un descuento?? Pues vaya complicación.
else
cobrar();
// el resto del programa
// funcion cobrar()
void cobrar(){
const double DESCUENTO = 0.5;
double precio = PRECIO; // PRECIO yo lo pondría <double> por si no es un entero.
char respuesta;
cout << "Eres estudiante (s/n)? ";
respuesta = getchar();
if(respuesta == 'S' || respuesta == 's')
precio *= DESCUENTO;
cout << "Perfecto, son $" << precio << endl;
}
- Y una vez se ha elegido pagado, te echa del sistema con un <return> así que el <while> de antes para meter varios usuarios ha quedado inservible. Más vale que nadie quiera ver la de Venom porque sino el siguiente que venga se encuentra con el sistema caído y se queda sin peli.
- Hasta aquí todo bien, bueno contando todos estos fallos...
- Pero ahora, si la opción es 1 destruimos el sistema y si no es 1: creamos un usuario nuevo (y al anterior que le den por no saber elegir), creamos unas variables nuevas con el nombre de las viejas pero encima con los tipos cambiados. Una pena ya que iba a molar mucho que si el primero dice que quiere comprar un boleto y la máquina le echa por elegir mal el siguiente que venga compra sí o sí gracias al <while> (debe de ser una medida para recaudar más boletos
).
- Y ya después de confundir un poco al compilador y hacer que se enfade y nos escupa unos cuantos errores llegaríamos al final. Una pena que nunca lleguemos al final ya que el programa nunca llega a compilar. Aunque han usado medidas para vender más boletos al final si no funciona la máquina se quedan sin vender ninguno...
Ya tienes corregidos los errores pequeños y unas cuantas y repito, CUANTAS, recomendaciones para que ese código funcione mejor sólo te queda arreglar la función principal para que funcione. Vaya así dicho parece como si mi esfuerzo no hubiese servido de nada...
PD: No había visto el <getch()> del final. Cambialo por <cin.get()> y manda a <conio.h> al quinto...
conio