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

[SOLUCIONADO] scanf y cin no me guardan arreglo (char)

Estas en el tema de scanf y cin no me guardan arreglo (char) en el foro de C/C++ en Foros del Web. Buen dia amigos del foro!! Tengo un problema con una variable, la quiero guarda en un arreglo de caracteres pero no la guarda queda vacia ...
  #1 (permalink)  
Antiguo 01/11/2013, 12:49
 
Fecha de Ingreso: julio-2011
Ubicación: guadalajara mX
Mensajes: 84
Antigüedad: 13 años, 2 meses
Puntos: 6
scanf y cin no me guardan arreglo (char)

Buen dia amigos del foro!!

Tengo un problema con una variable, la quiero guarda en un arreglo de caracteres
pero no la guarda queda vacia la variable despues de usar scanf o cin (linea 24).

Ase unos minutos estaba funcionando pero de un momento a otro ( no se si le movi algo) dejo de funcionar

Código C++:
Ver original
  1. #include "enlace.h"
  2.  
  3. int main()
  4. {
  5.     empleados log;
  6.     char ciclo='a';
  7.     char codigo_i[20];//datos ingresados
  8.     char pass2[15];
  9.     int c=0,entrada=1,c1,c2;
  10.  
  11.     system("color F1");
  12.  
  13.     do
  14.     {
  15.         system("cls");
  16.         reg = fopen("empleados.txt","r");
  17.         cout<<"SISTEMA TELEMEX IDENTIFIQUESE\n\n\n";
  18.         cout<<"Codigo de empleado: ";
  19.         fflush(stdin);
  20.         cin>>codigo_i;
  21.         cout<<"Password: ";
  22.         fflush(stdin);
  23.         cout<<pass2;  //antes de usar el scanf imprime varios caracteres extraños
  24.         scanf("%s",pass2);  
  25.         cout<<pass2; //aqui no imprime nada =(
  26.         while(c!=EOF)
  27.         {
  28.             fscanf(reg," %[^\t]",log.cod);
  29.             cout<<"cod: "<<log.cod<<endl;
  30.             fscanf(reg," %[^\t]",log.pass);
  31.             cout<<"pass: "<<log.pass<<endl;
  32.             fscanf(reg," %[^\t]",log.nombre);
  33.             cout<<"nombre: "<<log.nombre<<endl;
  34.             fscanf(reg," %[^\t]",log.apellido);
  35.             cout<<"apellido: "<<log.apellido<<endl;
  36.             fscanf(reg," %[^\t]",log.rfc);
  37.             cout<<"rfc: "<<log.rfc<<endl;
  38.             fscanf(reg," %[^\t]",log.tipo);
  39.             cout<<"tipo: "<<log.tipo<<endl;
  40.             c=fscanf(reg," %[^\n]",log.fecha);
  41.             cout<<"fecha: "<<log.fecha<<endl;
  42.  
  43.             if(!(c1=strcmp(codigo_i,log.cod))&&!(c2=strcmp(pass2,log.pass)))
  44.             {
  45.                 principal(log);
  46.                 entrada=0;
  47.                 //llamar funcion principal!!
  48.                 break;
  49.             }
  50.         }
  51.         if(entrada)
  52.             cout<<"Pass o codigo incorrecto\n\n";
  53.         cout<<"DESEA CONTINUAR s/n";
  54.         c=0;
  55.         fclose(reg);
  56.         ciclo=getch();
  57.     }while(ciclo=='s'||ciclo=='S');
  58.     cout<<c1<<c2<<endl;  //me arroja los resultados de los strcmp 0-1
  59.     cout<<pass2<<endl;  //solo hace el salto de linea
  60.     cout<<codigo_i<<endl;  //imprime el codigo que ingrese
  61.     return 0;
  62. }
Espero ustedes puedan ver si hay algun problema que yo no localizo =(

Desde ahora gracias =)
  #2 (permalink)  
Antiguo 01/11/2013, 14:25
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años
Puntos: 38
Respuesta: scanf y cin no me guardan arreglo (char)

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.  
  5.  
  6. int main ()
  7. {
  8.    
  9.    
  10.     string pass2;
  11.    
  12.      cout<<"introdusca pass2"<<endl;  //antes de usar el scanf imprime varios caracteres extraños
  13.     cin >> pass2;
  14.     cout<<pass2<<endl; //aqui no imprime nada =(
  15.  
  16.  
  17.  
  18.     //system ("pause>nul");
  19.     return 0;
  20. }

prueba con string, por que sino tendrás que hacer un for para meter los caracteres ahí en pass2.
Ademas como el enlace.h no puedo comprobar el funcionamiento del bucle.
  #3 (permalink)  
Antiguo 01/11/2013, 14:54
 
Fecha de Ingreso: julio-2011
Ubicación: guadalajara mX
Mensajes: 84
Antigüedad: 13 años, 2 meses
Puntos: 6
Respuesta: scanf y cin no me guardan arreglo (char)

Cita:
Iniciado por vangodp Ver Mensaje
prueba con string, por que sino tendrás que hacer un for para meter los caracteres ahí en pass2.
Ademas como el enlace.h no puedo comprobar el funcionamiento del bucle.
Te dejo el enlace.h

Código C++:
Ver original
  1. #ifndef ENLACE_H_INCLUDED
  2. #define ENLACE_H_INCLUDED
  3.  
  4. #include <iostream>
  5. #include <cstdio>
  6. #include <windows.h>
  7. #include <conio.h>
  8.  
  9. using namespace std;
  10.  
  11. class empleados
  12. {
  13. public:
  14.     char cod[20];
  15.     char pass[15];
  16.     char nombre[15];
  17.     char apellido[15];
  18.     char rfc[20];
  19.     char fecha[10];
  20.     char tipo[3];
  21. };
  22.  
  23. FILE *reg;
  24.  
  25. void principal(empleados emp);
  26. #endif // ENLACE_H_INCLUDED

empleados.txt

Código:
000001	123456	Juan	Perez	PECJ880212123	000	01-11-13
000002	123654	Susana	Ayala	AYJS911130123	001	01-11-13
como dato extra estoy trabajando en code blocks
  #4 (permalink)  
Antiguo 01/11/2013, 15:11
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años
Puntos: 38
Respuesta: scanf y cin no me guardan arreglo (char)

Es que para guardar datos en char ejemplo: pass2[15] tenemos 16 variables:
pass2[0]
pass2[1]
pass2[2]
pass2[3]
pass2[4]
pass2[5]
pass2[6]
pass2[7]
pass2[8]
pass2[9]
pass2[10]
pass2[11]
pass2[12]
pass2[13]
pass2[14]
pass2[15]
Al hacer : cin >> pass2; no sabes en cual de las 15 casas estas metiendo nada
Una cosa es que hicieras:
for int contador = 0 ; contador < 15 ; contador++){
cin >> pass2[contador];
}
Así seria una manera algo básica, pero piensa los problemas que tenemos eso implica.
1º que cada letra que introducimos tenemos que pulsar enter.
2º que tendríamos que introducir las 15 caracteres y ni todas las contraseñas tienen 15 caracteres
3º si quisieramos introducir menos de 15 o bien tendríamos que pedir al usuario la cantidad de caracteres o contar nosotros mismos con alguna funcion especial o crear una nuestra -_-'
Y puede que aya mas problemas.
  #5 (permalink)  
Antiguo 01/11/2013, 16:10
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años
Puntos: 38
Respuesta: scanf y cin no me guardan arreglo (char)

Mira lo de los caracteres estrañoes que te sale es por que al crear la variable no la inicializa.
eso se resuelve de esta manera.
char pass2[15] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

y creo que el programa funciona bien, lo unico que pide es una funcion que no existe de momento, el único error que eh visto, y como dije si usas string te sera mejor creo.
Es que una cadena necesitas percojer todas las casas con un bucle para ir rellenandolas todas.
Con el string no te pasa eso.
compila el programita que te deje y lo veras.
  #6 (permalink)  
Antiguo 01/11/2013, 17:08
 
Fecha de Ingreso: julio-2011
Ubicación: guadalajara mX
Mensajes: 84
Antigüedad: 13 años, 2 meses
Puntos: 6
Respuesta: scanf y cin no me guardan arreglo (char)

¬¬ que pena!! me causa esta solucion!!

parece que es problema del compilador descargue dev c y ahi funciono bien

te agradesco mucho los aportes!!

ya habia tratado de utilizar string pero me dio varios errores (strcmp, scanf, y otra cosa que no recuerdo) y resulto ser el compilador el del problema

QUE PENA!!
  #7 (permalink)  
Antiguo 02/11/2013, 08:41
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años
Puntos: 38
Respuesta: scanf y cin no me guardan arreglo (char)

Cita:
Iniciado por polpolpol Ver Mensaje
¬¬ que pena!! me causa esta solucion!!

parece que es problema del compilador descargue dev c y ahi funciono bien

te agradesco mucho los aportes!!

ya habia tratado de utilizar string pero me dio varios errores (strcmp, scanf, y otra cosa que no recuerdo) y resulto ser el compilador el del problema

QUE PENA!!
A lo mejor te falto alguna librería no se, no desista del entorno solo por que te tira errores, por que eso te lo van hacer todos.
Codeblocks es bueno entorno aun que le uso poco, ahorita ando usando el devc++ de orwell y la verdad no esta nada mal, pero codeblocks tienes mas recursos.
No se cuestion de gustos

Etiquetas: arreglo, caracteres, cin, funcion, int, nombre, scanf
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 10:07.