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

Duda con c++

Estas en el tema de Duda con c++ en el foro de C/C++ en Foros del Web. Estoy haciendo un programa para desencriptar y encriptar segun el metodo cesar. Tengo este codigo y 1 problema. Código: // Programa creado por Rollth // ...
  #1 (permalink)  
Antiguo 13/02/2014, 10:28
 
Fecha de Ingreso: diciembre-2013
Mensajes: 12
Antigüedad: 10 años, 4 meses
Puntos: 0
Duda con c++

Estoy haciendo un programa para desencriptar y encriptar segun el metodo cesar.
Tengo este codigo y 1 problema.

Código:
// Programa creado por Rollth
// Cifrado Cesar 1.0
// 12/2/2014

#include <iostream>// Añade la libreria iostream.h (Para el cout)
#include <stdio.h> // Introduce la libreria stdio.h para poder poner espacios en el codigo.
using namespace std;// Usa el espacio estandar de la libreria iostream para inicializar cin y cout

int main()// Empieza a correr el programa
{
    int n,m,opcion;// Crea dos variables "n" y "m". Además de otra variable opcion
    char codigo[10];// Crea la variable del cifrado
    cout << "------------------------------";// Presentacion del programa
    cout << endl;// Pasa la linea
    cout << ".     Cifrado Cesar 1.1      .";// Presentacion del programa
    cout << endl;// Pasa la linea
    cout << ".        Por Rollth          .";// Presentacion del programa
    cout << endl;// Pasa la linea
    cout << "------------------------------";// Fin presentacion del programa
    cout << endl;// Pasa la linea
    cout << "Si quieres cifrar una frase pulsa 1";// Manda el mensaje en rojo
    cout << endl;// Pasa de linea
    cout << "Si quieres descifrar pulsa 2";// Manda el mensaje en rojo
    cout << endl;// Pasa de linea
    cin >> opcion;// El usuario escoge la opcion
    if (opcion == 1)// Si la opcion 1
    {
    cout << "Introduce el cifrado";// Manda el mensaje en rojo
    cout << endl;// Pasa la linea
    gets(codigo);// Para escribir el codigo
    cout << "Introduce la clave";// El usuario escoge la clave
    cout << endl;// Pasa la linea
    cin >> m;// El usuario escoge el valor de la "m"
    n = 0;// Le da el valor de 1 a la "n"
    while (n != m)
    {
    n += 1;
    if (codigo[0] >= 'a' && codigo[0] < 'z')// Si el codigo esta entre "a" y "z"
    {
    codigo[0] += 1;// Se suma 1
    }
    if(codigo[0] == 'z')// Pero si es "z"
    {
    codigo[0] = 'a';// Se convierte en "a"
    }
    if(codigo[1] >= 'a' && codigo[1] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[1] += 1;
    }
    else if(codigo[1] == 'z')
    {
    codigo[1] = 'a';
    }
    if(codigo[2] >= 'a' && codigo[2] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[2] += 1;
    }
    else if(codigo[2] == 'z')
    {
    codigo[2] = 'a';
    }
    if(codigo[3] >= 'a' && codigo[3] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[3] += 1;
    }
    else if(codigo[3] == 'z')
    {
    codigo[3] = 'a';
    }
    if(codigo[4] >= 'a' && codigo[4] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[4] += 1;
    }
    else if(codigo[4] == 'z')
    {
    codigo[4] = 'a';
    }
    if(codigo[5] >= 'a' && codigo[5] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[5] += 1;
    }
    else if(codigo[5] == 'z')
    {
    codigo[5] = 'a';
    }
    if(codigo[6] >= 'a' && codigo[6] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[6] += 1;
    }
    else if(codigo[6] == 'z')
    {
    codigo[6] = 'a';
    }
    if(codigo[7] >= 'a' && codigo[7] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[7] += 1;
    }
    else if(codigo[7] == 'z')
    {
    codigo[7] = 'a';
    }
    if(codigo[8] >= 'a' && codigo[8] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[8] += 1;
    }
    else if(codigo[8] == 'z')
    {
    codigo[8] = 'a';
    }
    if(codigo[9] >= 'a' && codigo[9] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[9] += 1;
    }
    else if(codigo[9] == 'z')
    {
    codigo[9] = 'a';
    }
    if(codigo[10] >= 'a' && codigo[10] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[10] += 1;
    }
    else if(codigo[10] == 'z')
    {
    codigo[10] = 'a';
    }
    cout << codigo;
    cout << endl;
    }
    }
    else// En el otro caso
    {
    cout << "Introduce el cifrado";// Manda el mensaje en rojo
    cout << endl;// Pasa la linea
    gets(codigo);// Para escribir el codigo
   	n = 0;// Le da valor 1 a la "n"
    m = 25;// Le da el valor de 25 a la "m"
    while (n != m)
    {
    n += 1;
    if (codigo[0] >= 'a' && codigo[0] < 'z')// Si el codigo esta entre "a" y "z"
    {
    codigo[0] += 1;// Se suma 1
    }
    if(codigo[0] == 'z')// Pero si es "z"
    {
    codigo[0] = 'a';// Se convierte en "a"
    }
    if(codigo[1] >= 'a' && codigo[1] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[1] += 1;
    }
    else if(codigo[1] == 'z')
    {
    codigo[1] = 'a';
    }
    if(codigo[2] >= 'a' && codigo[2] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[2] += 1;
    }
    else if(codigo[2] == 'z')
    {
    codigo[2] = 'a';
    }
    if(codigo[3] >= 'a' && codigo[3] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[3] += 1;
    }
    else if(codigo[3] == 'z')
    {
    codigo[3] = 'a';
    }
    if(codigo[4] >= 'a' && codigo[4] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[4] += 1;
    }
    else if(codigo[4] == 'z')
    {
    codigo[4] = 'a';
    }
    if(codigo[5] >= 'a' && codigo[5] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[5] += 1;
    }
    else if(codigo[5] == 'z')
    {
    codigo[5] = 'a';
    }
    if(codigo[6] >= 'a' && codigo[6] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[6] += 1;
    }
    else if(codigo[6] == 'z')
    {
    codigo[6] = 'a';
    }
    if(codigo[7] >= 'a' && codigo[7] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[7] += 1;
    }
    else if(codigo[7] == 'z')
    {
    codigo[7] = 'a';
    }
    if(codigo[8] >= 'a' && codigo[8] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[8] += 1;
    }
    else if(codigo[8] == 'z')
    {
    codigo[8] = 'a';
    }
    if(codigo[9] >= 'a' && codigo[9] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[9] += 1;
    }
    else if(codigo[9] == 'z')
    {
    codigo[9] = 'a';
    }
    if(codigo[10] >= 'a' && codigo[10] < 'z')// Si el codigo esta entre "a" y "z",Se suma 1,Pero si es "z",Se convierte en "a"
    {
    codigo[10] += 1;
    }
    else if(codigo[10] == 'z')
    {
    codigo[10] = 'a';
    }
    cout << codigo;
    cout << endl;
    }
    }
	system("PAUSE");// Termina el programa
}
La cosa es que cuando en el gets(codigo) el programa se salta esta linea y se va hacia la siguiente
Si poco cin si me funciona, pero no me acepta los espacios, que me aconsejan hacer?

Gracias de antemano
  #2 (permalink)  
Antiguo 13/02/2014, 11:26
 
Fecha de Ingreso: septiembre-2008
Ubicación: Valencia
Mensajes: 160
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: Duda con c++

Esto también me pasaba a mi al principio cuando programaba, según me explicaron en aquel entonces es porque se quedan saltos de linea residuales y cosas así. Así que no esnseñaron a solucionarlo poniendo donde nos daba el problema de la lectura la función ignore del cin.

[codigo]cin.ignore();[/codigo]

De esta manera se limpiaba lo que quedara en memoria o algo así se no dijo, espero que te sirva. Ponlo en el punto donde está el salto.

Y si lo que quieres hacer es un encriptado cesar te será más facil pasar la cadena de texto a su código ASCII y sumar X números o restar. Y si quieres acotarlo dividir por modulo Y, y te será más fácil que ir continuamente haciendo comparaciones.
__________________
Siempre inmerso en nuevos proyectos.

Cuando estoy activo puedes verme en //LiveCoding
  #3 (permalink)  
Antiguo 13/02/2014, 11:37
 
Fecha de Ingreso: diciembre-2013
Mensajes: 12
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Duda con c++

He entendio lo que quieres decir, pero no se como tiene que quedar

Código:
cin >>[codigo]cin.ignore();[/codigo];
Código:
[codigo]cin.ignore();[/codigo];
asecas
Código:
gets([codigo]cin.ignore();[/codigo];)
Agradeceria que especificases un poco mas
  #4 (permalink)  
Antiguo 13/02/2014, 14:33
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: Duda con c++

Simplemente:

Código C++:
Ver original
  1. cin.ignore();
  #5 (permalink)  
Antiguo 13/02/2014, 20:41
 
Fecha de Ingreso: diciembre-2013
Mensajes: 12
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Duda con c++

me sigue dando errores cuando coloco un espacio
  #6 (permalink)  
Antiguo 13/02/2014, 21:55
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Duda con c++

Si lo que quieres es capturar un texto con espacios una forma es usar getline();

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main () {
  5.     string cadena;           //creamos un string
  6.     int tam = 0;
  7.     getline ( cin, cadena ); //guardamos toda una linea incluindo los espacios.
  8.     tam = cadena.length();   //tam guarda el tamaño de la cadena por si lo necesitamos.
  9.    
  10.     cout << cadena << endl;
  11.     cout << "Tamanio: " << tam;
  12.    
  13.     cin.ignore();
  14.     return 0;
  15. }

Etiquetas: funcion, int, metodo, programa
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 19:54.