Duda de novato.

Iniciado por javiiwk, 25 Septiembre 2014, 07:49 AM

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

javiiwk

Hola, lo que pasa es que jugando con c, quise hacer un programa que me siga pidiendo una contraseña hasta que la anote. el codigo es este:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
   char x;
   char z="javi";
while(x!= z){
   printf("Ingrese su Password: ");
   scanf("%c", &x);
   
}
   system("pause");
   return 0;
}

Con variables enteras el programa me deja hacer lo que quiero, pero cuando intento usar caracteres, esto pasa:


Si me pudieran orientar en que tengo mal, o porque me sale asi, se los agradeceria mucho.

engel lex

primero que nada usa las etiquetas GeSHi al publicar codigo


tienes varios errores, no se como se te ejecuta, qué compilador usas?

bueno, a los errores
primero
Código (cpp) [Seleccionar]
char a='z';

el char SOLO contiene un valor de tipo caracter (comilla simple) para que contenga una cadena lo declaras como un array

es decir
Código (cpp) [Seleccionar]
char x[10];
char z[10] = "javi";


eso trae un problema, los array no se pueden comprar directamente (especialmente porque los espacios sobrantes contienen "basura")

entonces tienes que usar una funcion para leerlo

por otro lado el scanf debe leer una cadena (string representada con %s) y no un char

la comparacion yo la haría

Código (cpp) [Seleccionar]
int i = 0;
bool valido = true;
for(i=0;i<10;i++){
   if(x[i]!=z[i]){
      valido=false;
      break;//esto provoca la salida del for
   }
   if(z[i]!='\0'){//si se llego al final de la cadena
      break;     
   }
}


comparo la posicion i de 'z' y 'x' que deben ser iguales y el '\0' es porque las cadenas terminan en ese caracter, así que eso indica que llegué al final de la contraseña, entonces si x es diferente a z valido se vuelve falso y sale, si todo es igual, al llegar al \0 valido queda true y sale del for
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

javiiwk

Uso Dev C++, no se si tendrías otro compilador que me recomendaras?
voy a probar eso que me pusiste, muchas gracias.

y perdón por lo del código, mas tarde me leeré las reglas.


eferion

Cita de: javiiwk en 25 Septiembre 2014, 16:57 PM
Uso Dev C++, no se si tendrías otro compilador que me recomendaras?

Nota aclaratoria: Dev C++ no es un compilador, es un IDE (Entorno de desarrollo integrado). Los IDE están preparados para automatizar ciertas tareas, de tal forma que, por ejemplo, compilar sea tan sencillo como darle a un botón. Dev C++ creo que viene con el compilador mingw... que es un buen compilador... ahora bien, Dev C++ es un entorno que creo que lleva varios años sin mantenimiento, por lo que la versión de tu compilador será bastante antigua. Funcional... pero antigua.

Hoy en día tienes IDE bastante buenos, potentes y gratuitos. Yo quizás me decantaría por uno de los siguientes:

* code::blocks: Uno de los más conocidos. Es mucho más completo que el IDE que usas actualmente, aunque el echo de tener tantas opciones hace que manejarlo al principio pueda ser un poco complicado... pero con un poco de paciencia te haces con el. Uno de sus instaladores para Windows instala también una versión de mingw.

* QtCreator: El entorno es más sencillo que Code::blocks, la pega es que te instala el paquete de Qt y eso puede llegar a ocupar algún giga de disco. Qt es un framework que abarca desde interfaz gráfica de usuario a tratamiento de ficheros, sockets, hilos... ahora que si no lo vas a usar puede que no merezca la pena instalarlo.

Ambos entornos pueden trabajar con diferentes compiladores: mingw, msvc, ...

Todo es cuestión de probar y trastear :)