ayuda con este programa, tengo un error logico creo

Iniciado por TaLaP0 XoR BiT, 2 Diciembre 2012, 14:14 PM

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

TaLaP0 XoR BiT

bueno pues estoy haciendo un programa que me permita cifrar y descifrar un texto usando el cifrado de cesar. este es mi codigo:




#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <cstdio>
#include <cstring>


using namespace std;

int op;// opcion del menu
char ts;//centinela
char texto[50];
int desp=1,tam,aux;

//funcion que cifra

void cifra()
{
   cout<<"Indique el texto a cifrar: ";
   gets(texto);
   tam=strlen(texto);
   for(int i=0;i<tam;i++)
   {
     aux=texto[i];
     if(aux+desp>122)
     {
        aux=((aux+desp)-122)+96;
     }
     else
     {
         aux=aux+desp;
     }
     if(texto[i]!=' ')
     {
        texto[i]=aux;
     }
   }
   cout<<"Texto cifrado a: "<<texto;
   getch();
   }


//funcion que descifra

void descifra()
{

   cout<<"Indique el texto a descifrar: ";
   gets(texto);
   tam=strlen(texto);
   for(int i=0;i<tam;i++)
   {
    aux=texto[i];
     if(aux-desp<97)
     {
       aux=122-(96-(aux-desp));
     }
     else
     {
        aux=aux-desp;
     }
     if(texto[i]!=' ')
     {
        texto[i]=aux;
     }
   }
   cout<<"Texto descifrado a: "<<texto;
   getch();
   }



int main()
{
   do{
   
   cout<<"| cifra un mensaje, envialo a tus contactos |"<<endl;
   cout<<"| y solo ellos veran su contenido!!            |"<<endl;
   cout<<"|==============================================|"<<endl;
   cout<<"| Que deseas hacer??                           |"<<endl;
   cout<<"| 1.cifra un mensaje                        |"<<endl;
   cout<<"| 2.descifra el mensaje                     |"<<endl;
   cout<<"| 3.Sacame de aqui                             |"<<endl;
   cout<<"|==============================================|"<<endl<<endl;
   cout<<"Ingresa tu opcion: ";
   cin>>op;
  system("cls");
   switch (op){

           case 1:
               cifra();

               break;

           case 2:
               descifra();

               break;

           case 3:
                cout<<"Realmente deseas salir, no ";
               break;

           default:
               cout<<"La Opcion elejida no existe. ";

               break;
   }

     cout<<"deseas realizar otra operacion? S/N"<<endl;
     cin>>ts;
     system ("cls");

   }while( ts=='s' || ts =='S');

   return 0;
}





ese es mi codigo la cuestion esta que las funciones cifra y descifra si me funcionan si las compilo por separado, pero cuando las uso llamandolas desde el main, cuando escogo por ejemplo la opcion 1, no me permite ingresar datos. cual sera mi error??. :huh: compilenlo y pruebenlo y me cuentan sus opiniones se los agradeceria muchisimo.

leosansan

CitarUn problema con el \n que se queda en el buffer, que se arregla con getchar.
Te que da por pulir el caso 3 y el default, ya que ambos te conducen a la última instrucción. Pero muy bien el ejercicio:
Código (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <cstdio>
#include <cstring>


using namespace std;

int op;// opcion del menu
char ts;//centinela
char texto[50];
int desp=1,tam,aux;

//funcion que cifra

void cifra()
{
    getchar();
    cout<<"Indique el texto a cifrar: ";
    gets(texto);
    tam=strlen(texto);
    for(int i=0;i<tam;i++)
    {
      aux=texto[i];
      if(aux+desp>122)
      {
         aux=((aux+desp)-122)+96;
      }
      else
      {
          aux=aux+desp;
      }
      if(texto[i]!=' ')
      {
         texto[i]=aux;
      }
    }
    cout<<"Texto cifrado a: "<<texto;
    getch();
    }


//funcion que descifra

void descifra()
{
    getchar();
    cout<<"Indique el texto a descifrar: ";
    gets(texto);
    tam=strlen(texto);
    for(int i=0;i<tam;i++)
    {
     aux=texto[i];
      if(aux-desp<97)
      {
        aux=122-(96-(aux-desp));
      }
      else
      {
         aux=aux-desp;
      }
      if(texto[i]!=' ')
      {
         texto[i]=aux;
      }
    }
    cout<<"Texto descifrado a: "<<texto;
    getch();
    }



int main()
{
    do{

    cout<<"| cifra un mensaje, envialo a tus contactos |"<<endl;
    cout<<"| y solo ellos veran su contenido!!            |"<<endl;
    cout<<"|==============================================|"<<endl;
    cout<<"| Que deseas hacer??                           |"<<endl;
    cout<<"| 1.cifra un mensaje                        |"<<endl;
    cout<<"| 2.descifra el mensaje                     |"<<endl;
    cout<<"| 3.Sacame de aqui                             |"<<endl;
    cout<<"|==============================================|"<<endl<<endl;
    cout<<"Ingresa tu opcion: ";

    cin>>op;
   system("cls");
    switch (op){

            case 1:
                cifra();

                break;

            case 2:
                descifra();

                break;

            case 3:
                 cout<<"Realmente deseas salir, no ";
                break;

            default:
                cout<<"La Opcion elejida no existe. ";

                break;
    }

      cout<<"\ndeseas realizar otra operacion? S/N"<<endl;
      cin>>ts;
      system ("cls");

    }while( ts=='s' || ts =='S');

    return 0;
}

Saluditos!.
P.D: cuando eliges las etiquetas GeSHi elige la opción de C++, aunque el código sea en C; así sale coloreado y es más fácil de seguir.

TaLaP0 XoR BiT

Leosansan gracias nuevamente por iluminar mi camino. Se agradece pulire el programa y seguire practicando mas. tomare en cuenta la sugierencia de c++ en Geshi. gracias.