Bucle Infinito ayuda.

Iniciado por jtrujilloj, 13 Febrero 2018, 02:25 AM

0 Miembros y 1 Visitante están viendo este tema.

jtrujilloj

Estoy tratando de hacer un programa que registre datos de una veterinaria al ingresar el 2do cliente y luego pasar al reporte o trato de eliminar un cliente me tira un bucle infinito aqui esta el codigo ayuda por favor.

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <windows.h>
#include <string>
#include <stdio.h>
#include <stdlib.h>



using namespace std;
//DEFINIENDO LAS VARIABLES NECESARIAS
string nombre, auxnombre, apellido, numero,nombreMascota,tipoMascota,edadMascota;
int clave = 0, auxclave = 0;
char grupo[10];
char opca;
bool encontrado = false;


void altas()
{
   ///Variables de la biblioteca fstream para el manejo de archivos
   ofstream escritura;
   ifstream consulta;

   do {
      escritura.open("alumnos.txt", ios::out | ios::app);//crea y escribe, si ya tiene texto une al final del archivo
      consulta.open("alumnos.txt", ios::in);//solamente consulta o lee usando la variable sobre el archivo físico alumnos.txt

      if (escritura.is_open() && consulta.is_open()) {


         bool repetido = false;

         cout << "\n";
         cout << "\tIngresa el nit del cliente:    ";
         cin >> auxclave;

         ///A continuación se aplica el tipo de lectura de archivos secuencial
         consulta >> clave;
         while (!consulta.eof()) {
            consulta >> nombre >> apellido >> grupo >> numero;
            if (auxclave == clave) {
               cout << "\t\tEl NIT ya esta registrado...\n";
               repetido = true;
               break;
            }
            consulta >> clave;
         }

         if (repetido == false) {
            cout << "\tIngresa el nombre del cliente:   ";
            cin >> nombre;

            cout << "\tIngresa el apellido del cliente:    ";
            cin >> apellido;
            cout << "\tIngresa el telefono del cliente:     ";
            cin >> numero;
            cout << "\t Ingrese el nombre de la mascota      ";
            cin >> nombreMascota;
            cout << "\tIngrese el tipo de mascota    ";
            cin >> tipoMascota;
            cout << "\t Edad de la mascota      ";
            cin >> edadMascota;
            //ESCRIBIENDO LOS DATOS CAPTURADOS POR EL USUARIO EN EL ARCHIVO
            escritura << auxclave << " " << nombre << " " << apellido << " " << numero << " " << nombreMascota << " " << tipoMascota << " " << edadMascota << endl;
            cout << "\n\tRegistro agregado...\n";
         }

         cout << "\n\tDeseas ingresar otro cliente? (S/N): ";
         cin >> opca;

      }
      else {
         cout << "El archivo no se pudo abrir \n";
      }

      escritura.close();
      consulta.close();

   } while (opca == 'S' or opca == 's');

}












void bajas()
{
   ofstream aux;
   ifstream lectura;

   encontrado = false;

   aux.open("auxiliar.txt", ios::out);
   lectura.open("alumnos.txt", ios::in);

   if (aux.is_open() && lectura.is_open()) {

      cout << "\n";
      cout << "\tIngresa el nit del cliente que deseas eliminar: ";
      cin >> auxclave;

      ///De nuevo se aplica el tipo de lectura de archivos secuencial, esto quiere decir que lee campo por campo hasta
      ///hasta llegar al final del archivo gracias a la función .eof()
      lectura >> clave;
      while (!lectura.eof()) {
         lectura >> nombre >> apellido >> grupo >> numero;
         if (auxclave == clave) {
            encontrado = true;
            cout << "\n";
            cout << "\tNit:    " << clave << endl;
            cout << "\tNombre:   " << nombre << endl;
            cout << "\tSemestre: " << apellido << endl;

            cout << "\tEdad:     " << numero << endl;
            cout << "\tNombre mascota" << nombreMascota << endl;
            cout << "\tTipo mascota" << tipoMascota << endl;
            cout << "\tEdad mascota" << edadMascota << endl;
            cout << "\t________________________________\n\n";
            cout << "\tRealmente deseas eliminar el registro actual (S/N)? ---> ";
            cin >> opca;

            if (opca == 'S' or opca == 's') {
               cout << "\n\n\t\t\tRegistro eliminado...\n\n\t\t\a";
            }
            else {
               aux << clave << " " << nombre << " " << apellido << " " << numero << " " << nombreMascota << " " << tipoMascota << " " << edadMascota << endl;
            }

         }
         else {
            aux << clave << " " << nombre << " " << apellido << " " << numero << " " << nombreMascota << " " << tipoMascota << " " << edadMascota << endl;
         }
         lectura >> clave;
      }
   }
   else {
      cout << "\n\tEl archivo no se pudo abrir \n";
   }

   if (encontrado == false) {
      cout << "\n\tNo se encontro ningun registro con la clave: " << auxclave << "\n\n\t\t\t";
   }

   aux.close();
   lectura.close();
   remove("alumnos.txt");
   rename("auxiliar.txt", "alumnos.txt");
}













void consultas()
{
   //Lectura de archivos

   ifstream lectura;
   lectura.open("alumnos.txt", ios::out | ios::in);//CREA, ESCRIBE O LEE
   if (lectura.is_open()) {
      //LEYENDO Y MOSTRANDO CADA CAMPO DEL ARCHIVO DE FORMA SECUENCIAL
      lectura >> clave;
      while (!lectura.eof()) {
         lectura >> nombre >> apellido >> grupo >> numero;
         cout << "\n";
         cout << "\tClave:    " << clave << endl;
         cout << "\tNombre:   " << nombre << endl;
         cout << "\tApellido: " << apellido << endl;
         cout << "\tNumero:     " << numero << endl;
         cout << "\tNombre mascota" << nombreMascota << endl;
         cout << "\tTipo mascota" << tipoMascota << endl;
         cout << "\tEdad mascota" << edadMascota << endl;
         lectura >> clave;
         cout << "\t________________________________\n";
      }

   }
   else {
      cout << "El archivo no se pudo abrir \n";
   }
   lectura.close();
}











void buscar()
{
   ifstream lectura;
   lectura.open("alumnos.txt", ios::out | ios::in);

   encontrado = false;

   if (lectura.is_open()) {
      cout << "\n\tIngresa la clave del alumno que deseas buscar: ";
      cin >> auxclave;

      lectura >> clave;
      while (!lectura.eof()) {
         lectura >> nombre >> apellido >> grupo >> numero;
         //comparar cada registro para ver si es encontrado

         if (auxclave == clave) {
            cout << "\n";
            cout << "\tNit:    " << clave << endl;
            cout << "\tNombre:   " << nombre << endl;
            cout << "\tApellido: " << apellido << endl;
            cout << "\tNumero:     " << numero << endl;
            cout << "\tNombre mascota" << nombreMascota << endl;
            cout << "\tTipo mascota" << tipoMascota << endl;
            cout << "\tEdad mascota" << edadMascota << endl;
            cout << "\t________________________________\n";
            encontrado = true;
            break;
         }//fin del if mostrar encontrado

          //lectura adelantada
         lectura >> clave;
      }//fin del while
      if (encontrado == false) {
         cout << "\n\n\tNo hay registros con la clave: " << auxclave << "\n\n\t\t\t";
      }
   }
   else {
      cout << "\n\tAun no se pudo abrir el archivo...";
   }

   lectura.close();
}







void modificar()
{
   ofstream aux;
   ifstream lectura;

   encontrado = false;

   aux.open("auxiliar.txt", ios::out);
   lectura.open("alumnos.txt", ios::in);

   if (aux.is_open() && lectura.is_open()) {

      cout << "\n";
      cout << "\tIngresa la clave del alumno que deseas modificar: ";
      cin >> auxclave;

      lectura >> clave;
      while (!lectura.eof()) {
         lectura >> nombre >> apellido >> grupo >> numero;
         if (auxclave == clave) {
            encontrado = true;
            cout << "\n";
            cout << "\tClave:    " << clave << endl;
            cout << "\tNombre:   " << nombre << endl;
            cout << "\tSemestre: " << apellido << endl;
            cout << "\tGrupo:    " << grupo << endl;
            cout << "\tEdad:     " << numero << endl;
            cout << "\t________________________________\n\n";
            cout << "\tIngresa el nuevo nombre del alumno con la clave: " << auxclave << "\n\n\t---> ";
            cin >> auxnombre;

            aux << clave << " " << auxnombre << " " << apellido << " "  << numero << endl;
            cout << "\n\n\t\t\tRegistro modificado...\n\t\t\a";
         }
         else {
            aux << clave << " " << nombre << " " << apellido <<  " " << numero << endl;
         }
         lectura >> clave;
      }
   }
   else {
      cout << "\n\tEl archivo no se pudo abrir \n";
   }

   if (encontrado == false) {
      cout << "\n\tNo se encontro ningun registro con la clave: " << auxclave << "\n\n\t\t\t";
   }

   aux.close();
   lectura.close();
   remove("alumnos.txt");
   rename("auxiliar.txt", "alumnos.txt");
}







int main()
{
   system("color f0");
   int opc;

   do {
      system("cls");

      cout << "\n\t Ingreso de datos Veterinaria\n\n";
      cout << "\n\t1.-Altas";
      cout << "\n\t2.-Eliminar";
      cout << "\n\t3.-Consultas";
      cout << "\n\t4.-Buscar un registro";
      cout << "\n\t5.-Modificaciones";
      cout << "\n\t6.-Salir";
      cout << "\n\n\tElige una opcion:  ";
      cin >> opc;
      switch (opc)
      {
      case 1: {
         system("cls");
         altas();
         cout << "\n\t\t";
         system("pause");
         break;
      }
      case 2: {
         system("cls");
         bajas();
         cout << "\n\t\t";
         system("pause");
         break;
      }

      case 3: {
         system("cls");
         consultas();
         cout << "\n\t\t";
         system("pause");
         break;
      }
      case 4: {
         system("cls");
         buscar();
         cout << "\n\t\t";
         system("pause");
         break;
      }
      case 5: {
         system("cls");
         modificar();
         cout << "\n\t\t";
         system("pause");

         break;
      }
      case 6: {
         cout << "\n\n\tHa elegido salir...\n\n\t\t"; system("pause");
         break;
      }
      default: {
         cout << "\n\n\tHa elegido una opcion inexistente...\n\n\t\t"; system("pause");
         break;
      }
      }//fin switch

   } while (opc != 6);

   system("cls");

   return 0;
}

vangodp

Hola!
Su programa tiene más errores de los que dices. Por ejemplo al escribir en el fichero con la función altas, en el fichero escribes esos datos:
Citarclave nombre apellido numero nombreMascota tipoMascota edadMascota

Que bem poderia ser algo como:
Código (cpp) [Seleccionar]
"007 Raul Vasquez 111222333 Roque perro 2"

Quedando los datos acima tal como:
Código (cpp) [Seleccionar]
clave = 007
nombre = "Raul"
apellido = "Vasquez"
numero = 111222333
nombreMascota = "Roque"
tipoMascota = "perro"
edadMascota = 2


Pero luego intentas leer desde el fichero con este trozo de código:
Código (cpp) [Seleccionar]
lectura >> clave;
      while (!lectura.eof()) {
         lectura >> nombre >> apellido >> grupo >> numero;
         cout << "\n";
         cout << "\tClave:    " << clave << endl;
         cout << "\tNombre:   " << nombre << endl;
         cout << "\tApellido: " << apellido << endl;
         cout << "\tNumero:     " << numero << endl;
         cout << "\tNombre mascota" << nombreMascota << endl;
         cout << "\tTipo mascota" << tipoMascota << endl;
         cout << "\tEdad mascota" << edadMascota << endl;
         lectura >> clave;
         cout << "\t________________________________\n";
      }


Y pregunto...¿Por qué intentas ler
Código (cpp) [Seleccionar]
clave >> nombre >> apellido >> grupo >> numero
cuando lo que tienes en el fichero es
Código (cpp) [Seleccionar]
clave >> nombre >> apellido >> numero >> nombreMascota >> tipoMascota >> edadMascota
???

Lo correcto seria que sú código fuera algo como eso:
Código (cpp) [Seleccionar]
lectura >> clave >> nombre >> apellido >> numero >> nombreMascota >> tipoMascota >> edadMascota;
        while (!lectura.eof()) {
            cout << "\n";
            cout << "\tClave:    " << clave << endl;
            cout << "\tNombre:   " << nombre << endl;
            cout << "\tApellido: " << apellido << endl;
            cout << "\tNumero:     " << numero << endl;
            cout << "\tNombre mascota" << nombreMascota << endl;
            cout << "\tTipo mascota" << tipoMascota << endl;
            cout << "\tEdad mascota" << edadMascota << endl;
            lectura >> clave >> nombre >> apellido >> numero >> nombreMascota >> tipoMascota >> edadMascota;
            cout << "\t________________________________\n";
        }


Revise su código, porque en la hora de leer estás haciendo mal. Tanto la función consulta como todas las demás repites el mismo error. Debes leer los mismos datos que has guardado, no puedes escribir siete datos y luego leer menos o más, debes leer siete.

Arregle esos puntos y luego vuelva y nos cuantas como ha salido.