Problema en C

KoKiTO

Pues tengo un problema kn este codigo en C k supuestamente t pide una clave y si fallas t da 3 intentos.Pero lo raro es k no me acepta nunka la clave komo valida.Aqui os dejo el codigo aber s¡ veis algun fallo:

#include<stdio.h>

void validarClave();

void main ()
{ char CLAVE[]="hola";
char clave[5];
printf("Introduzca la clave\n");
gets(clave);
if (clave!=CLAVE)
{ printf("clave Erronea\n");
validarClave();
}
else
{ printf("Clave Valida");
}
}
void validarClave()
{ int i=1;
char CLAVE[]="hola";
char clave[5];
printf("Tiene 3 intentos para acertar la clave\n");
do
{printf("Introduzca la clave\n");
scanf("%5s",clave);
if (clave!=CLAVE)
{ printf("clave Erronea\n");}
i+=1;
}
while (i<=3);
}

gF

El error está aquí:

if (clave!=CLAVE)

Dos cadenas de caracteres no se comparan así, lo que estas haciendo ahí es comparar dos referencias y siempre te da erronea pq las referencias son distintas.

KoKiTO

Pos yo la unica manera k se de comparar es kn !=, == e = no se mas :( y segun tu respuesta son todas para comparar referencias :(

S

tienes q introducir <string.h> i usar strcmp creo q es xa comparar las 2 cadenas (miralo en el man o x google), x cierto la iteracion hazla mjor con 1 for

gF

#include <stdio.h>
#include <string.h>

void main (){

char *secreta = "hola";
char clave[20];
int i=1;

do {
	printf("Introduzca la clave: ");
	scanf("%s",clave);

	if (strcmp(clave,secreta) != 0){
		printf("Clave Erronea\n");
		i++;
	}
	else {
		printf("Clave Valida\n");
		break;	
	}
}
while (i<=3);

}

PeLoTaSo

Todo eso sin tener en cuenta que si el usuario introduce una clave superior a 4 caracteres devolverá un desbordamiento, o utilizas string o vas pidiendo caracter a caracter hasta llegar a 4 y paras. Obviamente si un caracter es diferente al caracter en la misma posición en la variable CLAVE debe salir y no seguir comprobando.

#3 = No es un operador comparador, es un operador de asignación.

#5 No se si le dejarán usar break, a mí al menos nunca me han dejado :S

gF

#include <stdio.h>
#include <string.h>

void main (){

char *secreta = "hola";
char clave[20];
int i=1;
int acierto = 0;

do {
printf("Introduzca la clave: ");
scanf("%s",clave);

if (strcmp(clave,secreta) != 0){
printf("Clave Erronea\n");
i++;
}
else {
printf("Clave Valida\n");
acierto = 1;
}
}
while ((i<=3) && (acierto == 0));
}

Por si no te dejan usar break.

KoKiTO

aora ya ta. Gracias

Usuarios habituales

  • KoKiTO
  • gF
  • PeLoTaSo
  • Supernionio