consulta especifica en C ayuda

Iniciado por jysusxtreme, 17 Marzo 2015, 00:29 AM

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

jysusxtreme

alguien que me ayude porfavor lo que pasa esque en el caso 3: consulta especifica de el titulo de una pelicula,,
necesito que me aparescan todos los datos los cuales son id, precio y cantidad ---
#include <string.h>
#include <stdio.h>
int main()
{
int auxid ,id[20],opcion,cantidad[20],precio[20];
int registro=0,y,j,x,posicion,contador=0;
char buscartitulo[15],titulo[20][15],salir;
do
{

printf ("1.-Altas\n");
printf("2.-Ordenacion por id\n");
printf("3.-consulta especifica \n");
printf("4.-bajas\n");
printf("5.- modificacion \n");
printf ("6.-salir");
printf("Que opcion quieres\n ");
scanf("%d",&opcion);
switch(opcion)
{
case 1:
do
{
printf("id pelicula \n ");
scanf("%d",&id[registro]);
printf("titulo pelicula \n");
scanf("%s",titulo[registro]);
printf("precio\n");
scanf("%d",&precio[registro]);
printf("cantidad\n");
scanf("%d",&cantidad[registro]);
registro++;
printf("Quieres ingresar otro s/n \n");
scanf("%s",&salir);
}
while(salir!= 'n'&& registro<20);
break;

//ordenacion
case 2:
for (y=1;y<registro;y++)//y es nuestra ordenacion
for(x=0;x<registro-y;x++)
if(id
  • >id[x+1])
    {
    auxid=id
  • ;
    id
  • =id[x+1];
    id[x+1]=auxid;

    auxid=precio
  • ;
    precio
  • =precio[x+1];
    precio[x+1]=auxid;

    auxid=cantidad
  • ;
    cantidad
  • =cantidad[x+1];
    cantidad[x+1]=auxid;
    }
    for(x=0;x<registro;x++)
    printf(" [id]%d [titulo]%s [precio]%d [existencia]%d \n"
    ,id
  • ,titulo
  • ,precio
  • ,cantidad
  • );
    break;

    //strcpy(auxti,titulo
  • );
    //strcpy(titulo
  • ,titulo[x+1]);
    //strcpy(titulo[x+1],auxti);

    //aqui esta el problema
    lo estoy buscando como cadena de caracter en char con %s,,
    pero si lo busco con un dato tipo entero si me funciona....//
    case 3 :   
    contador=1;
    x=0;
    printf("titulo a buscar ");
    scanf("%s",buscartitulo);     ///si lo busco con un entero %d si me funciona
    while (contador==1&& x<registro)
    {
    if(buscartitulo==titulo
  • )
    { posicion=x;
    contador=0;
    }
    x++;
    }
    if (contador){
    printf("No se encontro el titulo que se buscaba\n");}
    else
    printf ("id es %d precio es %d cantidad es %d \n"
    ,id[posicion],precio[posicion],cantidad[posicion]);   
    break;

    case 5:
    break;
    default:printf("Error");
    }
    }
    while(opcion!=5);
    return 0;
    }

rir3760

Cuando publiques código fuente por favor utiliza las etiquetas de código. Estas se agregan mediante el cuadro desplegable con el texto "GeSHi" en la pagina de composición de mensajes, solo tienes que seleccionar ahí el lenguaje (C, C++, etc.).

----

El primer error ocurre cuando pides confirmación en el primer caso:
char buscartitulo[15], titulo[20][15], salir;

/* ... */

   printf ("Quieres ingresar otro s/n \n");
   scanf ("%s", &salir);
}while (salir != 'n' && registro < 20);

Para leer un carácter mediante scanf debes utilizar el especificador de formato " %c", el espacio antes del carácter '%' es necesario para ignorar el espacio blanco (espacio, tabulador, etc.).

El segundo error ocurre en el bloque donde buscas el registro:
printf ("titulo a buscar ");
scanf ("%s", buscartitulo);   ///si lo busco con un entero %d si me funciona
while (contador == 1 && x < registro){
   if (buscartitulo == titulo[x]){ /* <== */
      posicion = x;
      contador = 0;
   }
   x++;
}
if (contador) {
   printf ("No se encontro el titulo que se buscaba\n");
}
else
   printf ("id es %d precio es %d cantidad es %d \n"
           , id[posicion], precio[posicion], cantidad[posicion]);

En C no puedes utilizar el operador de comparación "==" con cadenas, en su lugar debes utilizar la función strcmp. Ejemplos de ellos los puedes consultar mediante el motor de búsqueda de los foros.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language