Intento comparar cadenas [novato]

Iniciado por barnix456, 5 Mayo 2012, 17:38 PM

0 Miembros y 2 Visitantes están viendo este tema.

barnix456

Hola a todos, me han dejado algunos ejercicios en #C y he resolvido la mayoría, pero me atore en este, creo que trata sobre comparar cadenas, me pide que use un ciclo WHILE de cierta forma que si se escribe la frase "abrete sesamo" el programa se cierra, pero si no el programa sigue pidiendo la frase para que se cumpla el ciclo y se cierre, y pues la verdad no se como comparar "LETRAS". Rápidamente a mi se me ha ocurrido algo asi:

Citar#include <stdio.h>
int main()
{
   char a;
   
   printf ("Escribe la contraseña correcta \n");
   scanf ("%c", &a);
   b:
   while (a=="abrete sesamo\n");
   {
      exit(0);
   }
   goto b;
   
   return 0;
}

Pero no lleva nada de logica, Aunque se me ha ocurrido otra idea, hace unos dias hace unos dias, a qui mismo en el foro hice una pregunta sobre como hacer para poner una contraseña a un programa, osea que no se tipea la contraseña correcta no abre las opciones del programa y si, el usuario "EXEL"  me resolvio la duda de esta manera:

Citar#include <stdio.h>
#include <string.h>
#define MAX_CHAR 100

int main ()
{
   char pass[MAX_CHAR];

   printf("Introduzca password: \n");
   fgets(pass,MAX_CHAR,stdin);

   if(strcmp(pass,"batman es mi vecino")==0)
   {
      printf ("Contraseña verdadera\n");

   }
   else
   {
      printf ("La contraseña es incorrecta\n");
   }
   return 0;
}

pero la verdad no entendi muy bien eso de "strcmp", pueden orientarme si puedo usar este miismo metodo, para mi duda y agregarla al ciclo WHILE.
GRACIAS
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov

STANHMAL

Hola que tal,

bien strcmp lo que hace es una comparación de cadenas, y funciona enviando las 2 cadenas que necesitas comparar, de la siguiente forma :

strcmp( Cadena1, Cadena2 ), y esta te retorna un número, si retorna 0 quiere decir que las 2  cadenas son iguales, y si te retorna un número diferente de 0, es porque son diferentes.

Lo que tu estas haciendo esta mal, ya que creaste una variable de tipo carácter que solo puede almacenar un carácter, para almacenar más de un carácter, necesitas crear un vector, tal y como lo hizo EXEL, esto que hizo es que la variable que se crea pueda almacenar tantos caracteres como le hallas pedido dentro de [ ], es decir,

char pass[100];

pass, puede almacenar hasta un total de 100 caracteres, mientras que si la dejas:

char pass;

pass, puede almacenar un único carácter.

$4!u2
Power Metal vs Reggaeton



Que es mi ordenador mi tesoro que todo el mundo ha de temer. Mi ley, el ratón y el módem. Mi única patria, la red

Slava_TZD

#2
#include <string.h>
#include <stdio.h>
...
{
char textointroducido[50];
...
   while(strcmp(texteintroducido, "fin\n")!=0) {
...
  }
}


Si estás interesado mira acá, hay ejemplos en los que se crea una función específica para lo que tu pides.


The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.

barnix456

Hay ok, de esa forma es en la que funciona  strcmp realmente no lo sabia, entonces tengo que usar eso, dentro del ciclo, intentare aserlo, y en un rato posteo lo que llevo, igual como estoy empezando me atoro mucho en C, gracias  STANHMAL, se agradece... XD
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov

barnix456

intente hacer algo y esto es lo que me ha salido:

Citar#include <stdio.h>
#include <string.h>
#define MAX_CHAR 100

int main()
{
   char pas[MAX_CHAR];
   
   printf ("introduzca la frase correcta\n");
   fgets(pas,MAX_CHAR,stdin);
   
   while (strcmp(pas,"abrete sesamo")==0)
   {
      printf ("la frase es correcta\n");
      getchar();
      exit(0);
   }
   printf ("Frase no leida\n");
   getchar();
   
   return 0;
}

pero me marca error el exit dice lo siguiente:
ejer3.c:16:3: aviso: declaración implícita de la función 'exit' [-Wimplicit-function-declaration]

que estoy haciendo mal??
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov

barnix456

Al fin me ha quedado:

Citar#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_CHAR 100

int main()
{
   char pas[MAX_CHAR];
   
   printf ("introduzca la frase correcta\n");
   fgets(pas,MAX_CHAR,stdin);
   
   while (strcmp(pas,"ola\n")==0)
   {
      printf ("la frase es correcta\n");
      getchar();
      exit(0);
   }
   printf ("Frase no leida\n");
   getchar();
   
   return 0;
}

me hacia falta agregar:
#include <stdlib.h>

Gracias, me ha servido de mucho su ayuda!! :)
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov

Slava_TZD

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_CHAR 100

int main()
{
   char pas[MAX_CHAR];
   
   printf ("introduzca la frase correcta\n");
   fgets(pas,MAX_CHAR,stdin);
   
   while (strcmp(pas,"ola\n")==0)
   {
      printf ("la frase es correcta\n");
      getchar();
      exit(0);
   }
   printf ("Frase no leida\n");
   getchar();
   
   return 0;
}


El while ahí no tiene sentido, si lo quieres hacer así lo que va ahí es un if. En tu primer mensaje decías que el programa debia seguir pidiendo frases, hasta que la frase fuese la correcta, el tuyo no hace eso.


The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.

barnix456

Ha si tienes razon, mira este si lo hace, creo, observalo y me comentas, ah y el while por que afuerzas quieren que use eso, por que bien solo seria un if-else, pero bueno

Citar#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_CHAR 100

int main()
{
   char pas[MAX_CHAR];
   
   a:
   printf ("introduzca la frase correcta\n");
   fgets(pas,MAX_CHAR,stdin);
   
   while (strcmp(pas,"ola\n")==0)
   {
      printf ("la frase es correcta\n");
      getchar();
      exit(0);
   }
   printf ("Frase no leida\n");
   getchar();
   goto a;
   
   return 0;
}
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov

STANHMAL

#8
Cita de: barnix456 en  5 Mayo 2012, 18:42 PM
...

:xD olvida el goto, es mala practica de programación, de momento no se hace visible que es malo, puesto que son cosas sencillas, pero cuando son códigos realmente largos, se vuelve realmente molesto.

Mira esta otra forma.


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

#define MAX_CHAR 100

int main()
{
  char pas[MAX_CHAR];
 
  do{
   printf ("introduzca la frase correcta\n");
   fgets(pas,MAX_CHAR,stdin);

   if(strcmp(pas,"ola\n")!=0){  
     printf ("la frase es incorrecta, intente nuevamente.\n");
     getchar();
   }

  }while (strcmp(pas,"ola\n")!=0);

  printf ("la frase es correcta.\n");
  getchar();
  return 0;

}


$4!u2
Power Metal vs Reggaeton



Que es mi ordenador mi tesoro que todo el mundo ha de temer. Mi ley, el ratón y el módem. Mi única patria, la red

barnix456

#9
wuao!, se ve un poco raro a primera vista, pero analizandolo bien, se ve mas formal por asi decirlo, solo tengo una duda por que el:

do {

edito:
tambien esta mal, por que escribo la frase correcta "ola" y dice: frase incorrecta, y lo que deberia decir es que esta bien y salir, aparte el programa nunca se cierra, son siemples errores, intentare analizar ese nuevo modelo, eso es nuevo para mi... :)
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov