elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Mensajes
Páginas: 1 ... 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 [95] 96 97 98 99 100 101 102
941  Programación / Programación C/C++ / Re: Como poner una constante dentro de un Dialogo "Cout"? en: 27 Noviembre 2018, 08:19 am
Te mostré como se hacía esto en el tema que iniciaste anterior a este... :silbar:
942  Programación / Programación C/C++ / Re: Problema con la Restricción de Edad hecha con If-Else y Struct en: 27 Noviembre 2018, 02:10 am
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>.
Código
  1. void registro(Usuario &user){
  2.    cout << "Nombre: ";
  3.    fgets(user.nombre, 100, stdin);
  4.    cout << "Edad: ";
  5.    scanf("%d", &user.edad);
  6.    cout << "Registrado Usuario: " << user.nombre << " Edad: " << user.edad << endl;
  7. }

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>.
Código
  1. while(res == 'N' || res == 'n'){
  2. cout<<"\n\nOk, que tenga un buen dia.";
  3. return 0;
  4.  
  5. // Forma correcta
  6. if(res == 'N' || res == 'n')
  7.    // todo lo demas
  8. }

- 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 :silbar:)

- No uses <if> para comprobar las opciones. Usa un <switch>.
Código
  1. switch(opcion){
  2.    case 1:
  3.        // lo que sea si la opcion es 1
  4.        break;
  5.    case 2:
  6.        // lo que sea si la opcion es 2
  7.        break;
  8.    // asi con todas las opciones que tengas y finalmente
  9.    default:
  10.        // lo que sea si la opcion no es ninguna de las anteriores
  11.        break; // este es opcional
  12. }

- Además y si a la primera pregunta no se responde ni <N> ni <S>? :huh:. 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.
Código
  1. if(opcion == 1);{
  2. cout<<"\nUsted quiere ver la de Venom..."<<endl;
  3. if(regis.edad<18){
  4. cout<<"Lo siento pero no puedes verla, esta bien grotesca para alguien como usted"<<endl;
  5. }
  6. else{
  7. cout<<"Perfecto, son $40"<<endl;
  8. }
  9. return 0;
  10. }
- 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.
Código
  1. else
  2.    cobrar();
  3. // el resto del programa
  4.  
  5. // funcion cobrar()
  6. void cobrar(){
  7.    const double DESCUENTO = 0.5;
  8.    double precio = PRECIO; // PRECIO yo lo pondría <double> por si no es un entero.
  9.    char respuesta;
  10.    cout << "Eres estudiante (s/n)? ";
  11.    respuesta = getchar();
  12.    if(respuesta == 'S' || respuesta == 's')
  13.        precio *= DESCUENTO;
  14.    cout << "Perfecto, son $" << precio << endl;
  15. }
- 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...
Código
  1. conio
:silbar:
943  Programación / Programación C/C++ / Re: Por favor, ayuda en: 25 Noviembre 2018, 13:50 pm
No. Tienes que modificar el mensaje y donde pone "Código GeSHi" despliegas el menú y eliges C y te saldrán dos etiquetas entre corchetes [ ].
Tienes que poner tu código entre los corchetes, es decir, [...] <tu código> [...].
Puedes darle a previsualizar para ver como ha quedado y el código tiene que quedar así:
Código
  1. // tu codigo
944  Programación / Programación C/C++ / Re: Por favor, ayuda en: 25 Noviembre 2018, 13:44 pm
Modifica el mensaje y mete el código entre etiquetas GeSHi para que podamos verlo bien.
945  Programación / Programación C/C++ / Re: Ayuda con programa en: 25 Noviembre 2018, 13:43 pm
Lo primero que no sé que idea tienes en la cabeza entonces no sé por qué haces algunas de las cosas que haces:
- El prototipo de la función <abrir()> no tiene parámetros, pero la definición de la función <abrir()> tiene un parámetro de tipo <int>. :huh:
- La función <menu()> está casi bien. Si la opción es 0 cambias el valor a una variable de tipo bool que no sé cual es su utilidad.  :huh:
- Además según tú, la función <abrir()> devuelve un valor de tipo <int> y tu función no devuelve nada. :huh:
- En la función <abrir()> compruebas que la variable <modo> sea 1 pero la variable <modo> no está inicializada.  :huh: Ahí lo único que tendría un poco de sentido sería que en vez de <modo == 1> quieras hacer <menu == 1>. Pero tienes que corregirlo.
- Y por último en todo el programa no llamas a la función <abrir()>  :huh:
946  Programación / Programación C/C++ / Duda cstdlib y srand (C++) en: 25 Noviembre 2018, 07:33 am
Esto puede parecer una tontería ya que no tiene mucha complicación usar la librería de C++ <cstdlib> y las funciones <srand> y <rand> para generar números aleatorios. Pero qué pasa si no usas <cstdlib> o usas la función <time()> sin incluir <ctime>?? :huh:
Estaba haciendo un programa en el que iba a generar unos números aleatorios pero se me ha olvidado incluir tanto la librería <cstdlib> como la función <srand> es decir que únicamente he usado la función <rand> sin más... Y el programa ha funcionado. :o
Me he puesto a hacer pruebas y os dejo los resultados (compilado desde Ubuntu 18.04 con g++ <programa.cpp> -o <programa>):
Código
  1. #include <iostream>
  2. #include <list>
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7. const int MAX_ELEMENTS = 10;
  8. const int LIMIT_INF = 0, LIMIT_SUP = 5;
  9.  
  10. list<int> myList;
  11.  
  12. for(size_t i = 0; i < MAX_ELEMENTS; i++)
  13. myList.push_back(LIMIT_INF + rand() % (LIMIT_SUP - LIMIT_INF + 1));
  14.  
  15. for(auto it = myList.cbegin(); it != myList.cend(); it++)
  16. cout << *it << "  ";
  17. cout << endl;
  18. }

Con este código compila el programa sin errores ni warnings pero sí es cierto que los números son siempre los mismos (lógico por no usar srand).

Entonces he probado a incluir la semilla sin nada más, es decir, como se ve aquí:
Código
  1. #include <iostream>
  2. #include <list>
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7. const int MAX_ELEMENTS = 10;
  8. const int LIMIT_INF = 0, LIMIT_SUP = 5;
  9.  
  10. list<int> myList;
  11.  
  12. srand(time(NULL));
  13.  
  14. for(size_t i = 0; i < MAX_ELEMENTS; i++)
  15. myList.push_back(LIMIT_INF + rand() % (LIMIT_SUP - LIMIT_INF + 1));
  16.  
  17. for(auto it = myList.cbegin(); it != myList.cend(); it++)
  18. cout << *it << "  ";
  19. cout << endl;
  20. }
Y ahora tengo un programa que compila sin errores ni warnings y que genera los números aleatorios distintos cada vez que se ejecuta el programa (sin compilarlo antes de cada ejecución). ;-)
También si os dais cuenta tampoco he incluido <ctime> para usar la función <time()>. :silbar:
He estado investigando <iostream> por si incluía <cstdlib> pero no he encontrado nada. Lo de usar <list> es simplemente porque era lo que estaba usando cuando me he dado cuenta de esto y no he querido quitarlo por si tenía algo que ver con la respuesta aunque tampoco he encontrado nada al respecto.
947  Programación / Programación C/C++ / Re: Ayuda con programa en: 24 Noviembre 2018, 23:17 pm
El prototipo de la función <abrir> no tiene parámetros pero luego en su implementación sí tiene un parámetro de tipo <int> :huh:
Si estás haciendo cambios en el programa vuelve a mandar el código para ver como lo tienes ahora ya que no es igual que el que mandaste al principio.
948  Programación / Programación C/C++ / Re: ¿Queda algo en el Buffer de Entrada stdin? en: 24 Noviembre 2018, 22:09 pm
Y si por ejemplo tienes datos pendientes en el buffer pero no sabes que datos son, osea que no tiene porqué ser un salto de línea (0xa), has encontrado alguna forma de vaciar el buffer??
Es decir igual que:
Código
  1. while ((c = getchar()) != 0xA);
Pero como representar el final de datos pendientes. No sé si me he explicado.
949  Programación / Programación C/C++ / Re: ¿Por qué no va este código? en: 24 Noviembre 2018, 22:03 pm
Primero: no entiendo muy bien el objetivo del programa, osea no entiendo que es lo que quieres calcular, por lo que haré uso de mi imaginación.
Segundo: por qué pasas como parámetros x e y si nada más empezar la función los modificas?? :huh:
Tercero: estás seguro de que la suma y el resultado sólo deben ponerse a 0 al empezar la función y no habrá que ponerlos a 0 en cada iteración?? Y lo digo como pregunta porque repito que no sé cual es el propósito de la función pero estos suelen ser los errores más comunes por eso te los comento.

Y si no se arregla con lo que te he dicho explícame por favor el uso de esa función y cómo la usas en el <main> ya que no sé qué dos parámetros le pasas (aunque no haces uso de ellos).
950  Programación / Programación C/C++ / Re: ¿Queda algo en el Buffer de Entrada stdin? en: 24 Noviembre 2018, 19:14 pm
Yo la verdad también tengo esa duda ya que por mucho que he leído y he buscado información no he encontrado respuesta a tu pregunta. Sin embargo aunque no suelo programar mucho en C no suelo tener el problema del buffer pero por ejemplo intentando ayudar en un post que dejo a continuación:
https://foro.elhacker.net/programacion_cc/necesito_ayuda_en_este_rpograma_quiero_que_pregunte_si_quiero_hacer_otro_correo-t489865.0.html
me pasaba lo mismo porque quedaban los saltos de línea en el buffer y entonces se me saltaban algunas de las entradas de datos. El tema de los saltos de línea pude solucionarlos como buenamente pude (puedes ver el código que dejé en ese post para ver las soluciones que encontré aunque son unas soluciones un poco caseras para salir del paso) ya que no quería usar <fflush> ya que también he leído que no debe usarse para el buffer de entrada, sino para el de salida.

Sin embargo me siguió quedando un problema en ese código que dejé comentado también para ver si alguien podía ayudarme a solucionarlo pero al final se ha quedado ahí y yo me he quedado sin una respuesta. :-\
Espero que alguien nos pueda ayudar a resolver esta duda tan básica pero que todo el mundo pasa por alto... :-X
Páginas: 1 ... 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 [95] 96 97 98 99 100 101 102
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines