Ayuda! con el IF

Iniciado por TopoJunior, 1 Julio 2012, 15:34 PM

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

TopoJunior

Código (cpp) [Seleccionar]
#include <stdio.h>
main()
{
char producto[40];

printf("Hola, que producto quiere?\n");
printf("Hay , 1 - patatas, 2 - tomates\n");
scanf("%s", producto);
if (producto=="patatas")
{
printf("Hola\n");
}
else
{
printf("ERROR");
};

while(1);

}


Bueno.. quiero que cuando ponga patatas salga eso, no quiero mas xD!, creo que está bien, pero en el scanf pongo patatas y me salta el else.... :(
Porfavor si no es así, diganme como sería!!!

DickGumshoe

Hola.

Para comparar cadenas, no puede hacerse tal y como compararíamos un número o un carácter (y así es como tú lo tienes).

Para compararlas, hay que usar la función strcmp, incluida en la librería string.h .

La función devuelve 0 si las cadenas son iguales, y otro valor si son distintas.

Es decir, el programa quedaría así:

#include <stdio.h>
#include <string.h>
int main()
{
char producto[40];

printf("Hola, que producto quiere?\n");
printf("Hay , 1 - patatas, 2 - tomates\n");
scanf("%s", producto);
if ((strcmp(producto, "patatas"))== 0)
{
printf("Hola\n");
}
else
{
printf("ERROR");
}

while(1);
return 0;

}


También te recomiendo usar la función gets (o mejor aún, fgets), para pedir cadenas de caracteres, ya que scanf te coge solo hasta el primer espacio que introduce el usuario.

Cualquier duda, pregunta  ;)

Espero haberte ayudado.

Saludos.

TopoJunior

Cita de: DickGumshoe en  1 Julio 2012, 15:58 PM
Hola.

Para comparar cadenas, no puede hacerse tal y como compararíamos un número o un carácter (y así es como tú lo tienes).

Para compararlas, hay que usar la función strcmp, incluida en la librería string.h .

La función devuelve 0 si las cadenas son iguales, y otro valor si son distintas.

Es decir, el programa quedaría así:

#include <stdio.h>
#include <string.h>
int main()
{
char producto[40];

printf("Hola, que producto quiere?\n");
printf("Hay , 1 - patatas, 2 - tomates\n");
scanf("%s", producto);
if ((strcmp(producto, "patatas"))== 0)
{
printf("Hola\n");
}
else
{
printf("ERROR");
}

while(1);
return 0;

}


También te recomiendo usar la función gets (o mejor aún, fgets), para pedir cadenas de caracteres, ya que scanf te coge solo hasta el primer espacio que introduce el usuario.

Cualquier duda, pregunta  ;)

Espero haberte ayudado.

Saludos.


Muchas gracias!!! me sirvio, gracias, pero me puedes explicar todo ? es decir:

if ((strcmp(producto, "patatas"))== 0)   // aqui dice, if (( porque hay que poner dos paréntesis envez de uno ??????, luego, tenemos strcmp(producto, "patatas"))==0 porque hay que poner ))==0 ? eso que significa?
      {
         printf("Hola\n");
      }
      else
         {
            printf("ERROR");
      }

DickGumshoe

Se pone el "==0" porque la función devuelve 0 si las cadenas son iguales, y otro número si son diferentes.

O sea, diríamos:

"Si las cadenas son iguales, imprime "Hola", sino, imprime "ERROR".

Los dos paréntesis están de más. Pueden ponerse o no, no son obligatorios. Podría ser también así:

if (strcmp(producto, "patatas")== 0)

Saludos.

TopoJunior

Cita de: DickGumshoe en  1 Julio 2012, 16:16 PM
Se pone el "==0" porque la función devuelve 0 si las cadenas son iguales, y otro número si son diferentes.

O sea, diríamos:

"Si las cadenas son iguales, imprime "Hola", sino, imprime "ERROR".

Los dos paréntesis están de más. Pueden ponerse o no, no son obligatorios. Podría ser también así:

if (strcmp(producto, "patatas")== 0)

Saludos.

Muchisimas gracias, me sirvió 100% :)))))

DickGumshoe

De nada, me alegro de que lo hayas entendido  ;D