Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Duda bucle

Estas en el tema de Duda bucle en el foro de C/C++ en Foros del Web. #include <iostream> #include <fstream> #include <cstdlib> #include <ctime> #include <string> using namespace std; int main(){ int partidasGanadas= 0; int partidasPerdidas = 0; int partidasEmpatadas = ...
  #1 (permalink)  
Antiguo 15/11/2012, 09:23
 
Fecha de Ingreso: octubre-2012
Mensajes: 7
Antigüedad: 11 años, 6 meses
Puntos: 0
Duda bucle

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <string>
using namespace std;
int main(){
int partidasGanadas= 0;
int partidasPerdidas = 0;
int partidasEmpatadas = 0;

while(true){
int eleccion1;
int eJ;
int eC;
string eleccionJugador;
string apodo;
string comparar;
ofstream escribir_jugadores;
ifstream leer_reglas;
ifstream leer_jugadores;
string reglas;
cout << "Introduce tu apodo : ";
cin >> apodo;


escribir_jugadores.open("E:\\jugadores.txt");
leer_jugadores.open("E:\\jugadores.txt");
if(leer_jugadores.is_open()&&escribir_jugadores.is _open()){
while(!leer_jugadores.eof()){
escribir_jugadores << apodo;
}
while(leer_jugadores.eof()){
leer_jugadores >> comparar;
if(comparar != apodo){
escribir_jugadores << apodo;
}
else{
break;
}
}
}
else{
cout << "El archivo no se ha abierto correctamente" << endl;
}
escribir_jugadores.close();
leer_jugadores.close();

cout << "¿Que quieres hacer?" << endl;
cout << "1- Jugar una partida" << endl;
cout << "2- Ver instrucciones" << endl;
cout << "0- Salir" << endl;
cin >> eleccion1;
if((eleccion1 != 0)&&(eleccion1 != 1)&&(eleccion1 != 2)){
cout << "Opcion no valida!" << endl;
}
if(eleccion1 == 2){

leer_reglas.open("reglas.txt");
if(leer_reglas.is_open()){
while(leer_reglas.eof()){
leer_reglas >> reglas;
cout << reglas;
}
}
}

else{
cout << "El archivo no se ha abierto correctamente " << endl;
}
leer_reglas.close();
if(eleccion1 == 0){
cout << "Partidas Ganadas : " << partidasGanadas << endl;
cout << "Partidas Perdidas : " << partidasPerdidas << endl;
cout << "Partidas Empatadas : " << partidasEmpatadas << endl;
cout << "Hasta luego!" << endl;
break;
}
if(eleccion1 == 1){
cout << "Elige elemento ( 1-piedra, 2-papel, 3-tijera, 4-lagarto, 5-spock)" << endl;
cin >> eJ;
while((eJ != 1)&&(eJ != 2)&&(eJ != 3)&&(eJ != 4)&&(eJ != 5)){
cout << "Elemento desconocido. Intentelo de nuevo " << endl;
cout << "Elige elemento ( 1-piedra, 2-papel, 3-tijera, 4-lagarto, 5-spock)" << endl;
cin >> eJ;
}
}
switch(eJ){
case 1: eleccionJugador = "piedra";
break;
case 2: eleccionJugador = "papel";
break;
case 3: eleccionJugador = "tijera";
break;
case 4: eleccionJugador = "lagarto";
break;
default :
eleccionJugador = "spock";
break;
}
srand (time(NULL));
eC = 1+ rand ( ) % 5;

switch(eC){
case 1:
cout << "Mi eleccion : piedra" << endl;
cout << "Tu eleccion : " << eleccionJugador << endl;
if((eJ == 3)||(eJ == 4)){
cout << "Yo gano!" << endl;
partidasPerdidas++;
}
else if(eJ == 1){
cout << "Empate!" << endl;
partidasEmpatadas++;
}
else{
cout << "Tu ganas" << endl;
partidasGanadas++;
}
;break;

case 2:
cout << "Mi eleccion : papel" << endl;
cout << "Tu eleccion : " << eleccionJugador << endl;
if((eJ == 1)||(eJ == 5)){
cout << "Yo gano!" << endl;
partidasPerdidas++;
}
else if(eJ == 2){
cout << "Empate!" << endl;
partidasEmpatadas++;
}
else{
cout << "Tu ganas" << endl;
partidasGanadas++;

}
;break;
case 3:
cout << "Mi eleccion : tijera" << endl;
cout << "Tu eleccion : " << eleccionJugador << endl;
if((eJ == 2)||(eJ == 4)){
cout << "Yo gano!" << endl;
partidasPerdidas++;
}
else if(eJ == 3){
cout << "Empate!" << endl;
partidasEmpatadas++;
}
else{
cout << "Tu ganas" << endl;
partidasGanadas++;
}
;break;

case 4:
cout << "Mi eleccion : lagarto" << endl;
cout << "Tu eleccion : " << eleccionJugador << endl;
if((eJ == 5)||(eJ == 2)){
cout << "Yo gano!" << endl;
partidasPerdidas++;
}
else if(eJ == 4){
cout << "Empate!" << endl;
partidasEmpatadas++;
}
else{
cout << "Tu ganas" << endl;
partidasGanadas++;
}
;break;

default :
cout << "Mi eleccion : spock" << endl;
cout << "Tu eleccion : " << eleccionJugador << endl;
if((eJ == 1)||(eJ == 3)){
cout << "Yo gano!" << endl;
partidasPerdidas++;
}
else if(eJ == 5){
cout << "Empate!" << endl;
partidasEmpatadas++;
}
else{
cout << "Tu ganas" << endl;
partidasGanadas++;
}
;break;




}


}

}



A ver si alguien me puede decir que le pasa al programa, lo ejecuto, pero una vez introducido el apodo, no sucede nada, alguna sugerencia?

Para guiaros, se trata del juego (Piedra , papel, tijera, lagarto , spock).
Con 2 flujos de entrada y 1 de salida.
  #2 (permalink)  
Antiguo 15/11/2012, 17:51
Avatar de ZeKi  
Fecha de Ingreso: noviembre-2012
Ubicación: Jaén
Mensajes: 61
Antigüedad: 11 años, 6 meses
Puntos: 6
Respuesta: Duda bucle

Has depurado el código y has visto en qué punto se queda pillado?
  #3 (permalink)  
Antiguo 15/11/2012, 17:56
 
Fecha de Ingreso: octubre-2012
Mensajes: 7
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Duda bucle

Sí, Zeki, cambié un par de cosas y veo que va funcionando.

Ahora tengo otro problema con este bucle:


if(leer_jugadores.is_open()){
while(!leer_jugadores.eof()){
leer_jugadores >> comparar;
if(comparar == apodo){
cout << "El apodo que has usado ya existe, prueba otro : " <<endl;
cin >> apodo;

}
}
}


El problema que tengo es que comprueba si en un archivo, el "apodo" introducido ya existe, pero luego salta de linea.
No sé si me explico, un ejemplo:

Si en el archivo de texto hay :
Juan
Jose

Y yo como apodo introduzco de primeras Juan, me dice que ya existe el apodo introducido , que introduzca de nuevo, pero ahí si vuelvo a introducir Juan, como el programa está leyendo "Jose" , me lo da por válido.
Me sigues? Alguna idea?
  #4 (permalink)  
Antiguo 15/11/2012, 18:45
Avatar de ZeKi  
Fecha de Ingreso: noviembre-2012
Ubicación: Jaén
Mensajes: 61
Antigüedad: 11 años, 6 meses
Puntos: 6
Respuesta: Duda bucle

Lo que debes hacer es que a cada vez que entre en el "if" se coloque al principio del fichero, podría ser algo así:

Código C++:
Ver original
  1. if(leer_jugadores.is_open()){
  2.       while(!leer_jugadores.eof()){
  3.          leer_jugadores >> comparar;
  4.          if(comparar == apodo){
  5.             leer_jugadores.seekg(0, ios::beg); //Esto te colocará el puntero de lectura del fichero al incio del mismo
  6.             cout << "El apodo que has usado ya existe, prueba otro : " <<endl;
  7.             cin >> apodo;
  8.  
  9.          }
  10.      }
  11. }

Sin probarlo, diría que te debería funcionar así.
  #5 (permalink)  
Antiguo 15/11/2012, 18:52
 
Fecha de Ingreso: octubre-2012
Mensajes: 7
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Duda bucle

Zeki, me gustaría preguntarte tambien, como podría hacer un bucle, para leer un archivo de texto, e imprimirlo por pantalla, un archivo de muchas lineas de texto.

Un saludo
  #6 (permalink)  
Antiguo 15/11/2012, 19:01
Avatar de ZeKi  
Fecha de Ingreso: noviembre-2012
Ubicación: Jaén
Mensajes: 61
Antigüedad: 11 años, 6 meses
Puntos: 6
Respuesta: Duda bucle

La lectura de ficheros depende mucho de la forma en la que éstos esten estructurados internamente. Si por ejemplo el fichero lo que tiene son lineas de texto separadas unas de otras por "\n", puedes usar la función getline(fichero, linea) dentro de un bucle en la que te va metiendo las lineas que va leyendo (siempre con el "\n" como separador) en la variable linea (de tipo string).

Etiquetas: bucle, int, programa, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:23.