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

Tratando de avanzar, codigo c++, una mano.

Estas en el tema de Tratando de avanzar, codigo c++, una mano. en el foro de C/C++ en Foros del Web. Hola, estoy empezando a programar en c++ y ya se me presentaron problemas Quiero hacer un generador de contraseñas, pero no entiendo por que en ...
  #1 (permalink)  
Antiguo 28/11/2011, 14:17
 
Fecha de Ingreso: noviembre-2011
Mensajes: 6
Antigüedad: 12 años, 5 meses
Puntos: 0
Tratando de avanzar, codigo c++, una mano.

Hola, estoy empezando a programar en c++ y ya se me presentaron problemas

Quiero hacer un generador de contraseñas, pero no entiendo por que en una variable tipo char con indice, no puedo acceder a sus datos por indice por medio de otra variable de valor int.

Ademas la funcion creacontraseñas, simplemente no retorna la clave

Código C++:
Ver original
  1. #include<iostream>
  2.  
  3. #include<stdlib.h>
  4. #include<time.h>
  5.  
  6. using namespace std;
  7.  
  8. char lyn[37]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','Ñ','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'};
  9.  
  10. int cifras, alertorio;
  11.  
  12.  
  13. char creacontraseña(){
  14.     cout<<"¿Cuantas cifras quieres que contenga tu clave?";
  15.     cin>>cifras;
  16.     char clave[cifras];   //Aqui esta el error!
  17.     for (int i=0;i<cifras;){
  18.         alertorio=rand()%38;
  19.         clave+=lyn[alertorio];
  20.         i+=1;
  21.     }
  22.  
  23.     return clave;  //Ademas no retorna nada!
  24. }
  25.  
  26.  
  27.  
  28. int main(){
  29.     srand ( time(NULL) );
  30.     char bienvenida[]="Hola!!! Bienvenido a mi programa jaja\nEste programa te creara una contraseña alertoria automaticamente...\n\nPulsa cualquier tecla para continuar";
  31.     cout<<bienvenida;
  32.     cin.get();
  33.     int n=0; char j=NULL;
  34.     while(n!=1){
  35.     cout<<creacontraseña();
  36.     cout<<"¿Quieres otra contraseña? S/N";
  37.     cin>>j;
  38.     if(j=='n'){n=1;}
  39.     }
  40. }
  #2 (permalink)  
Antiguo 28/11/2011, 15:17
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Tratando de avanzar, codigo c++, una mano.

Tienes muchos errores sobre punteros.
Esto no esta permitido:
char clave[cifras];
siendo cifras una varible que seteas en tiempo de ejecucion. Para hacer eso necesitas reservar memoria.

char * clave = new char[cifras];

Luego si trabajas con char esto esta mal:

clave+=lyn[alertorio];

deberias ser :

clave[i] = lyn[alertorio];

Debes darle un indice para colocar el caracter. Por ultimo a la salida del for deberias asignar el caracter nulo para determina el fin de la cadena:

chave[cifras] = '\0';

Pero recuerda que los array van de 0 hasta n-1 por eso deberias pedir un numero mas en el new:

char * clave = new char[cifras +1 ];
  #3 (permalink)  
Antiguo 28/11/2011, 15:42
 
Fecha de Ingreso: noviembre-2011
Mensajes: 6
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Tratando de avanzar, codigo c++, una mano.

Gracias! Ahora cual es la diferencia entre

char clave[cifras]; y char * clave = new char[cifras];

Se que lo que es un puntero, pero aun no me meto en eso, pero en que afecta a la definicion si cifras sigue siendo una variable que defino en tiempo de ejecucion como dijiste. En cualquiera de los casos cifras adquiere valor al mismo tiempo... A ver si me entendes mi pregunta.

Si deficno la variable en ves de puntero, no reserva la memoria?


Que preguntas tontas que hago ehh?
  #4 (permalink)  
Antiguo 28/11/2011, 15:48
 
Fecha de Ingreso: diciembre-2010
Ubicación: valencia
Mensajes: 203
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Tratando de avanzar, codigo c++, una mano.

si tu declaras un array de N elementos, el compilador reserva espacio para el y ese es el tamaño que va a tener siempre. ¿como podria el compilador determinar el tamaño del mismo si N se le da en tiempo de ejecucion?.

en el caso de punteros puedes usar una variable ya que la memoria es reservada en ejecucion y liberada cuando termine el programa o durante la ejecucion del mismo.
  #5 (permalink)  
Antiguo 28/11/2011, 18:37
 
Fecha de Ingreso: noviembre-2011
Mensajes: 6
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Tratando de avanzar, codigo c++, una mano.

Ahh gracias a ambos, ya comprendo!

Etiquetas: funcion, programa, variables
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 16:18.