Los problemas del programa original son dos: el primero es el tamaño del array para almacenar la linea introducida por el usuario y el segundo que no eliminas (si es el caso) el resto de la linea.
El primero se elimina simplemente ajustando el tamaño del segundo array para que pueda contener la contraseña mas un carácter adicional y el segundo revisando la linea introducida por el usuario (cortesía de la función "strchr"): si no se encuentra el carácter '\n' significa que hay que descartar caracteres (el resto de la linea).
En cuanto a tu segunda pregunta "fgets" solo lee la linea, si deseas una comparación debes utilizar la función "strcmp".
El programa con las correcciones es:
Un saludo
El primero se elimina simplemente ajustando el tamaño del segundo array para que pueda contener la contraseña mas un carácter adicional y el segundo revisando la linea introducida por el usuario (cortesía de la función "strchr"): si no se encuentra el carácter '\n' significa que hay que descartar caracteres (el resto de la linea).
En cuanto a tu segunda pregunta "fgets" solo lee la linea, si deseas una comparación debes utilizar la función "strcmp".
El programa con las correcciones es:
Código (c) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char contra[] = "xD";
char linea[sizeof contra + 1];
char *p;
while (1){
printf("Introduce la contrasena: ");
fflush(stdout);
if (fgets(linea, (int) sizeof linea, stdin) == NULL)
return EXIT_FAILURE;
if ((p = strchr(linea, '\n')) != NULL)
*p = '\0';
if (strcmp(contra, linea) == 0){
puts("Contrasena correcta");
break;
}else if (p == NULL){
int ch;
while ((ch = getchar()) != EOF && ch != '\n')
;
}
}
return EXIT_SUCCESS;
}
Un saludo