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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con programa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 4 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con programa  (Leído 2,438 veces)
HectorSersi

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Ayuda con programa
« en: 22 Noviembre 2018, 20:37 pm »

Hola buenas, me gustaria hacer que al escoger el modo A, se abriese un archivo de texto(el que el usuario teclee) para poder leer varios numeros. El problema es que creo que ya tengo el codigo bien pero no me ejecuta y no se que hacer para poder acabarlo... por favor una ayudita.

Gracias :)

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include<ctime>
  4. #include<conio.h>
  5. #include<fstream>
  6. #include<string>
  7. #include<istream>
  8.  
  9. using namespace std;
  10. int menu();
  11. int abrir();
  12.  
  13.  
  14. int main()
  15. {
  16. int modo;
  17.  
  18.  
  19. modo = menu();
  20.  
  21.  
  22.  
  23. system("PAUSE");
  24.  
  25. return 0;
  26. }
  27.  
  28.  
  29. int menu()
  30. {
  31. int modo;
  32.  
  33. bool exit = false;
  34. do {
  35.  
  36. cout << "Introduce 1 para Modo A: cada jugador estara obligado, cuando le llegue el turno, a robar un numero concreto de cartas." << endl;
  37. cout << "Introduce 2 para Modo B: cada jugador podra robar el numero de cartas que desee y plantarse si no quiere mas." << endl;
  38. cout << "Introducir 0 para salir del juego." << endl;
  39. cout << endl;
  40. cout << "Introduce el modo al que quieres jugar; 1, 2 o 0: ";
  41. cin >> modo;
  42.  
  43.  
  44. switch (modo)
  45. {
  46. case 1: cout << "Ha elegido el modo A" << endl; break;
  47. case 2: cout << "Ha elegido el modo B" << endl; break;
  48. case 0: exit = true;
  49. default: cout << "No ha seleccionado ningun modo." << endl;
  50. }
  51.  
  52.  
  53. } while (modo < 0 || modo > 2);
  54.  
  55.  
  56. system("PAUSE");
  57.  
  58.  
  59. return(modo);
  60.  
  61. }
  62.  
  63.  
  64. int abrir(int menu)
  65. {
  66. int modo;
  67.  
  68.  
  69. if (modo == 1)
  70. {
  71.  
  72.  
  73. ifstream archivo;
  74. string text, texto;
  75.  
  76. cout << "Ingrese nombre o direccion del archivo a leer: ";
  77. getline(cin, text);
  78. text += ".txt";
  79.  
  80. archivo.open(text.c_str(), ios::in);
  81.  
  82.  
  83. if (archivo.fail()) {
  84.  
  85. cout << "No se ha podido abrir el archivo";
  86. exit(1);
  87.  
  88. }
  89.  
  90. while (!archivo.eof())
  91. {
  92. getline(archivo, text);
  93. cout << text << endl;
  94.  
  95. }
  96.  
  97. archivo.close();
  98.  
  99. _getch();
  100.  
  101.  
  102. }
  103.  
  104. return (menu);
  105. }


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 834



Ver Perfil
Re: Ayuda con programa
« Respuesta #1 en: 22 Noviembre 2018, 22:28 pm »

No estás usando la función <abrir>, así es imposible que funcione. Además de eso no sé si el fallo es ese o es otra cosa entonces si te sale algún error de compilación inclúyelo en el mensaje.

PD: Por favor, no usar <conio.h>, ni <system("pause")> y creo recordar que la librería <istream> no es necesaria.


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
HectorSersi

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: Ayuda con programa
« Respuesta #2 en: 24 Noviembre 2018, 14:16 pm »

No estás usando la función <abrir>, así es imposible que funcione. Además de eso no sé si el fallo es ese o es otra cosa entonces si te sale algún error de compilación inclúyelo en el mensaje.

PD: Por favor, no usar <conio.h>, ni <system("pause")> y creo recordar que la librería <istream> no es necesaria.


Hola, gracias por responder, he quitado el system("PAUSE") y las librerias que me has dicho pero sigo sin saber como hacer para usar la funcion abir... y los errores que me salen al compilar son estos:

"El identificador getch no esta definido"
"No se encontró el identificador _getch"
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 834



Ver Perfil
Re: Ayuda con programa
« Respuesta #3 en: 24 Noviembre 2018, 14:31 pm »

<getch()> es una función de la librería <conio.h> pero esta librería no es estándar por eso no se recomienda su uso. Hay alternativas estándar para <getch()> como por ejemplo <cin.get()>.
Prueba a cambiar eso y me comentas. Suerte.

Edit: El <system("pause")> también puede sustituirse por <cin.get()> ya que su objetivo es hacer una pausa pero de esta manera no tienes que hacer una llamada al sistema lo cual es bastante costoso.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
HectorSersi

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: Ayuda con programa
« Respuesta #4 en: 24 Noviembre 2018, 23:03 pm »

<getch()> es una función de la librería <conio.h> pero esta librería no es estándar por eso no se recomienda su uso. Hay alternativas estándar para <getch()> como por ejemplo <cin.get()>.
Prueba a cambiar eso y me comentas. Suerte.

Edit: El <system("pause")> también puede sustituirse por <cin.get()> ya que su objetivo es hacer una pausa pero de esta manera no tienes que hacer una llamada al sistema lo cual es bastante costoso.


Muchas gracias, solo me queda el tema de la funcion abrir... me salen 2 errores al compilar:

"abrir" no todas las rutas de acceso de control devuelven un valor
se utilizo la variable local "modo" sin inicializar

no entiendo muy bien lo de modo.
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 834



Ver Perfil
Re: Ayuda con programa
« Respuesta #5 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.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
HectorSersi

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: Ayuda con programa
« Respuesta #6 en: 25 Noviembre 2018, 12:10 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.

Estos son los cambios que he hecho, y los errores son los mismos del mensaje anterior.

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include<ctime>
  4. #include<fstream>
  5. #include<string>
  6.  
  7.  
  8. using namespace std;
  9. int menu();
  10. int abrir();
  11.  
  12.  
  13. int main()
  14. {
  15. int modo;
  16.  
  17.  
  18. modo = menu();
  19.  
  20.  
  21.  
  22. system("PAUSE");
  23.  
  24. return 0;
  25. }
  26.  
  27.  
  28. int menu()
  29. {
  30. int modo;
  31.  
  32. bool exit = false;
  33. do {
  34.  
  35. cout << "Introduce 1 para Modo A: cada jugador estara obligado, cuando le llegue el turno, a robar un numero concreto de cartas." << endl;
  36. cout << "Introduce 2 para Modo B: cada jugador podra robar el numero de cartas que desee y plantarse si no quiere mas." << endl;
  37. cout << "Introducir 0 para salir del juego." << endl;
  38. cout << endl;
  39. cout << "Introduce el modo al que quieres jugar; 1, 2 o 0: ";
  40. cin >> modo;
  41.  
  42.  
  43. switch (modo)
  44. {
  45. case 1: cout << "Ha elegido el modo A" << endl; break;
  46. case 2: cout << "Ha elegido el modo B" << endl; break;
  47. case 0: exit = true;
  48. default: cout << "No ha seleccionado ningun modo." << endl;
  49. }
  50.  
  51.  
  52. } while (modo < 0 || modo > 2);
  53.  
  54.  
  55. system("PAUSE");
  56.  
  57.  
  58. return(modo);
  59.  
  60. }
  61.  
  62.  
  63. int abrir(int menu)
  64. {
  65. int modo;
  66.  
  67.  
  68. if (modo == 1)
  69. {
  70.  
  71.  
  72. ifstream archivo;
  73. string text, texto;
  74.  
  75. cout << "Ingrese nombre o direccion del archivo a leer: ";
  76. getline(cin, text);
  77. text += ".txt";
  78.  
  79. archivo.open(text.c_str(), ios::in);
  80.  
  81.  
  82. if (archivo.fail()) {
  83.  
  84. cout << "No se ha podido abrir el archivo";
  85. exit(1);
  86.  
  87. }
  88.  
  89. while (!archivo.eof())
  90. {
  91. getline(archivo, text);
  92. cout << text << endl;
  93.  
  94. }
  95.  
  96. archivo.close();
  97.  
  98. cin.get();
  99.  
  100.  
  101. }
  102.  
  103. }
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 834



Ver Perfil
Re: Ayuda con programa
« Respuesta #7 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:
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
HectorSersi

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: Ayuda con programa
« Respuesta #8 en: 3 Diciembre 2018, 22:23 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:


Vale, te explico. Lo que quiero hacer es un juego de cartas. He hecho un menú y lo que quiero hacer es que al seleccionar el modo A en el menú, ponga: "Se ha seleccionado el modo A" y depues de esto se me abra el archivo de texto que tiene una serie de numeros enteros ( que son las cartas)... lo que quiero es hacer el llamamiento del double modoA del archivo de texto a esta funcion pero no se como. Se me pide que el juego use •   double modoA(ifstream & file, int numCartas)  que permite a cualquiera de los dos jugadores realizar su turno en el modo de juego A. Recibe el archivo con el mazo y el número de cartas que hay que robar, y devuelve los puntos obtenidos tras robar ese número de cartas, obtener 7,5 o pasarse. El archivo que quiero abrir se llama: text, lo digo para indicarme el que cambiar.

Necesito ayuda con el codigo(lo he cambiado y creo que esta mejor), estoy perdido... Gracias.

Código
  1. #include <cstdlib>
  2. #include<ctime>
  3. #include<fstream>
  4. #include<string>
  5.  
  6.  
  7. using namespace std;
  8.  
  9. #define HUMANO =1;
  10. #define MAQUINA =2;
  11.  
  12. int menu();
  13. int abrir();
  14.  
  15. void lectura(int modo);
  16.  
  17. int main()
  18. {
  19. int modo;
  20.  
  21. modo = menu();
  22. lectura(modo);
  23.  
  24. system("PAUSE");
  25.  
  26. return 0;
  27. }
  28.  
  29.  
  30. int menu()
  31. {
  32. int modo;
  33.  
  34. bool exit = false;
  35. do {
  36.  
  37. cout << "Introduce 1 para Modo A: cada jugador estara obligado, cuando le llegue el turno, a robar un numero concreto de cartas." << endl;
  38. cout << "Introduce 2 para Modo B: cada jugador podra robar el numero de cartas que desee y plantarse si no quiere mas." << endl;
  39. cout << "Introducir 0 para salir del juego." << endl;
  40. cout << endl;
  41. cout << "Introduce el modo al que quieres jugar: 1, 2 o 0: ";
  42. cin >> modo;
  43.  
  44.  
  45. switch (modo)
  46. {
  47. case 1: cout << "Ha elegido el modo A" << endl; break;
  48. case 2: cout << "Ha elegido el modo B" << endl; break;
  49. case 0: exit = true;
  50. default: cout << "No ha seleccionado ningun modo." << endl;
  51. }
  52.  
  53.  
  54. } while (modo < 0 || modo > 2);
  55.  
  56.  
  57. system("PAUSE");
  58.  
  59.  
  60. return(modo);
  61.  
  62. }
  63.  
  64.  
  65. void lectura(int modo){
  66.  
  67. ifstream archivo;
  68. string text,texto;
  69. cout<<"Introduce el nombre o ubicacion del archivo: "<<endl;
  70.  
  71. archivo.open(text.c_str(),ios::in); //Abrimos el archivo en modo lectura
  72.  
  73. if(archivo.fail()){
  74. cout<<"No se pudo abrir el archivo";
  75. exit(1);
  76. }
  77.  
  78. while(!archivo.eof()){ //mientras no sea final del archivo
  79. getline(archivo,texto);
  80. cout<<texto<<endl;
  81. }
  82.  
  83. archivo.close(); //Cerramos el archivo
  84.  
  85. }
  86.  
  87. double modoA(ifstream & archivo, int numCartas)
  88. {
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97. }



PD: creo que la funcion void lectura() no deberia ser tipo void, pero no estoy seguro...
« Última modificación: 3 Diciembre 2018, 22:41 pm por HectorSersi » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 834



Ver Perfil
Re: Ayuda con programa
« Respuesta #9 en: 3 Diciembre 2018, 23:14 pm »

Lo siento pero sigo sin entender el funcionamiento del programa del todo. Como ya te comenté creo:
- Usar una variable <bool exit> que es <false> y si la opción es 0 se pone a <true> no tiene mucho sentido ya que esa variable no tiene ningún propósito.
- Y sustituye los <system("pause")> por <cin.get()>. Vas a conseguir lo mismo, una pausa hasta que teclees algo pero sin tener que hacer una llamada al sistema.
- Tienes que incluir el archivo de cabecera <iostream> ya que sino no puedes usar <cin> ni <cout>.

Ahora vamos a profundizar en el código:
- La función <menu()> la entiendo. Muestras un menú, el usuario elige una opción y esa se devuelve al programa principal. Hasta ahí todo bien. No sé que uso le vas a dar pero dentro de cada <case> puedes poner todo lo que hay que hacer en caso de elegir esa opción. Pero personalmente si la función se llama menú prefiero que sólo muestre el menú y no haga más todo lo demás se haga en el <main> o en otra función creada específicamente para esa tarea.
Lo que no sé es lo que vas a hacer en la función <lectura()> entonces no sé cómo ayudarte... :-X
Supongo que la función <lectura()> llama internamente a <modoA()> usando el fichero que ha abierto. Pero qué más hace? O qué hace la función <modoA()> porque sino sería hacer otro <switch> en la función <lectura()> y según el <modo> que le pases como parámetro llame a la función <modoA()> o <modoB()> (si existe) o lo que tenga que hacer.

Tampoco sé si te mandan usar unas funciones obligatorias o lo estás estructurando cómo tú quieres porque tal y como lo estás haciendo como la opción va de un lado para otro, tienes que estar comparándola un montón de veces para ver que hacer. Si puedes dime que funciones tienes o quieres usar y que tienes en la cabeza que haga cada una (si puedes especificar parámetros o valores de retorno mejor).
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] 2 3 4 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines