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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


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

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Bucle Infinito ayuda.
« en: 13 Febrero 2018, 02:25 am »

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;
}


En línea

vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: Bucle Infinito ayuda.
« Respuesta #1 en: 13 Febrero 2018, 09:42 am »

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:
Citar
clave nombre apellido numero nombreMascota tipoMascota edadMascota

Que bem poderia ser algo como:
Código
  1. "007 Raul Vasquez 111222333 Roque perro 2"

Quedando los datos acima tal como:
Código
  1. clave = 007
  2. nombre = "Raul"
  3. apellido = "Vasquez"
  4. numero = 111222333
  5. nombreMascota = "Roque"
  6. tipoMascota = "perro"
  7. edadMascota = 2

Pero luego intentas leer desde el fichero con este trozo de código:
Código
  1. lectura >> clave;
  2.      while (!lectura.eof()) {
  3.         lectura >> nombre >> apellido >> grupo >> numero;
  4.         cout << "\n";
  5.         cout << "\tClave:    " << clave << endl;
  6.         cout << "\tNombre:   " << nombre << endl;
  7.         cout << "\tApellido: " << apellido << endl;
  8.         cout << "\tNumero:     " << numero << endl;
  9.         cout << "\tNombre mascota" << nombreMascota << endl;
  10.         cout << "\tTipo mascota" << tipoMascota << endl;
  11.         cout << "\tEdad mascota" << edadMascota << endl;
  12.         lectura >> clave;
  13.         cout << "\t________________________________\n";
  14.      }

Y pregunto...¿Por qué intentas ler
Código
  1. clave >> nombre >> apellido >> grupo >> numero

cuando lo que tienes en el fichero es
Código
  1. clave >> nombre >> apellido >> numero >> nombreMascota >> tipoMascota >> edadMascota

???

Lo correcto seria que sú código fuera algo como eso:
Código
  1. lectura >> clave >> nombre >> apellido >> numero >> nombreMascota >> tipoMascota >> edadMascota;
  2.        while (!lectura.eof()) {
  3.            cout << "\n";
  4.            cout << "\tClave:    " << clave << endl;
  5.            cout << "\tNombre:   " << nombre << endl;
  6.            cout << "\tApellido: " << apellido << endl;
  7.            cout << "\tNumero:     " << numero << endl;
  8.            cout << "\tNombre mascota" << nombreMascota << endl;
  9.            cout << "\tTipo mascota" << tipoMascota << endl;
  10.            cout << "\tEdad mascota" << edadMascota << endl;
  11.            lectura >> clave >> nombre >> apellido >> numero >> nombreMascota >> tipoMascota >> edadMascota;
  12.            cout << "\t________________________________\n";
  13.        }

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.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
probando un bucle infinito... « 1 2 3 »
Bugs y Exploits
mousehack 22 15,602 Último mensaje 28 Agosto 2015, 21:46 pm
por MCKSys Argentina
El que se ha metido en un bucle infinito soy yo...
Programación C/C++
Superplay 0 3,819 Último mensaje 1 Diciembre 2010, 21:14 pm
por Superplay
[Ayuda-C] Bucle infinito
Programación C/C++
Miky Gonzalez 4 2,821 Último mensaje 11 Octubre 2013, 15:51 pm
por Miky Gonzalez
Ayuda Phyton bucle infinito
Scripting
SkaTrumpet 1 1,688 Último mensaje 1 Diciembre 2015, 01:06 am
por daryo
error, bucle infinito, alguien que me ayude a evitar el bucle infinito
Programación C/C++
marcos0204 4 2,552 Último mensaje 27 Marzo 2020, 22:44 pm
por fary
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines