Problemilla/Dudilla con C (un array xD)

SikorZ

Bueno es simple, en este programa introduzco 10 cadenas que luego son introducidas en una estructura, despues de todo eso comparamos cada una de las cadenas introducidas con la primera para saber si son iguales, si lo son imprimo un mensaje en pantalla diciendo cuales cumplen esa condicion.

Lo que simplemente quiero es que al meter los datos en la estructura automaticamente con un array cambie lo de "libro1.nombre" y vaya subiendo el numero hasta 10 y lo mismo para comparar con el primero y lanzar el printf pero no hay manera, C no es lo mio jaja, a ver si alguien me echa un cablecillo que para quien sepa esto debe ser una estupidez xDD

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <string.h>
#include <time.h>
#include <math.h>
#include <conio.h>
#include  <sys/types.h>
struct libro
{
       char nombre[50];
};
void borrar()
{
   system("cls");     
} main() { libro libro1,libro2,libro3,libro4,libro5,libro6,libro7,libro8,libro9,libro10; system("color 0F"); printf("Introduce el nombre del libro 1\n"); gets(libro1.nombre); borrar(); printf("Introduce el nombre del libro 2\n"); gets(libro2.nombre); borrar(); printf("Introduce el nombre del libro 3\n"); gets(libro3.nombre); borrar(); printf("Introduce el nombre del libro 4\n"); gets(libro4.nombre); borrar(); printf("Introduce el nombre del libro 5\n"); gets(libro5.nombre); borrar(); printf("Introduce el nombre del libro 6\n"); gets(libro6.nombre); borrar(); printf("Introduce el nombre del libro 7\n"); gets(libro7.nombre); borrar(); printf("Introduce el nombre del libro 8\n"); gets(libro8.nombre); borrar(); printf("Introduce el nombre del libro 9\n"); gets(libro9.nombre); borrar(); printf("Introduce el nombre del libro 10\n"); gets(libro10.nombre); borrar(); printf("Los libros que coinciden con el titulo del primero son: "); if(strcmp(libro1.nombre,libro2.nombre)==0) { printf("2 "); } if(strcmp(libro1.nombre,libro3.nombre)==0) { printf("3 "); } if(strcmp(libro1.nombre,libro4.nombre)==0) { printf("4 "); } if(strcmp(libro1.nombre,libro5.nombre)==0) { printf("5 "); } if(strcmp(libro1.nombre,libro6.nombre)==0) { printf("6 "); } if(strcmp(libro1.nombre,libro7.nombre)==0) { printf("7 "); } if(strcmp(libro1.nombre,libro8.nombre)==0) { printf("8 "); } if(strcmp(libro1.nombre,libro9.nombre)==0) { printf("9 "); } if(strcmp(libro1.nombre,libro10.nombre)==0) { printf("10 "); } printf("\n\n"); system("pause");
}
NeB1

Lo suyo será que te crees un array de tipo libro, aunque no recuerdo muy bien como se debe hacer en C, será algo así


libro libros[10];
int i = 0;
for( i = 0; i< 10; i++)
{
       printf("Introduce el nombre del libro %d\n", i);
       gets(libros[i].nombre); borrar();     
}
1 respuesta
SikorZ

Arreglado, me encontre co otro problemilla pero ya lo he podido solucionar, lo que tu dijiste #2 ya lo habia probado y no se porque no me fue, algo cambiaria...

Bueno dejo el codigo para que le echeis un ojo o por si a alguien le sirve de algo xD

EDITO: He cambiado muchas partes para depurarlo muxo mas y ponerle tonterias. Una pregunta, como borro todos los datos guardados al principio de la estructura para repetir el proceso del programa?

Que es lo que falla aqui? es una funcion para vaciar la estructuca:

void vaciar()
{
    int p;
    for(p=1;p<=10;p++);
    {
        strcpy(libro[p].nombre,"");
    }
 
}

[/b]

1 respuesta
NeB1

#3 Supongo que falla el que empieces desde 1 y acabes en 10, en lugar de empezar por 0 y acabar por 9, ¿no?

(eso si has declarado libro[10])

#5 pero aún así:

     for(p=1;p<=10;p++);
     {
         strcpy(libro[p].nombre,"");
     }  

el valor de 'p' varía de 1 a 10, mientras que los índices del array 'libro' supongo que irán de 0 a 9 (si programas de la forma normal xDD)

Puedes poner el código completo del programa?

1 respuesta
SikorZ

#4 Esa funcion esta para borrar todos los registros de la estructura llamandola asi
vaciar();

sin pasar ningun parametro ni nada, por lo tanto no entiendo el problema=/
edit:

#6 aqui te lo dejo, si seguramente sera una tonteria del tamaño de mi pene mediavidero pero estoy acostumbrado a programar en php y para mi C es 20 pasos atras xDDDD, me hago la pixa un lio con los arrays y punteros de mierda xDDD

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string.h>
#include <time.h>
#include <math.h>
#include <conio.h>
#include <sys/types.h>
struct libro
{
       char nombre[50];
};
void borrar()
{
   system("cls");     
} void vaciar() { int p; for(p=1;p<=10;p++); { strcpy(libro[p].nombre,""); } } main() { int i,success=0,coincidencia=0,salir=2; libro libro[10],libro1,libro2,libro3,libro4,libro5,libro6,libro7,libro8,libro9,libro10; system("color 0E"); do{ i=2; borrar(); vaciar(); printf("Introduce el nombre del libro 1\n"); gets(libro1.nombre); borrar(); for(i=2;i<=10;i++) { printf("Introduce el nombre del libro %d\n", i); gets(libro[i].nombre); borrar(); }
for(i=2;i<=10;i++) { if(strcmp(libro1.nombre,libro[i].nombre)==0) { if(coincidencia==0) { coincidencia++; printf("Los libros que coinciden con el titulo del primero son: "); } printf("%d ",i); success=1; } } if(success==0) { printf("No se ha encontrado ninguna coincidencia con el libro 1: %s",libro1.nombre); } printf("\n\nDesea salir del programa?\n1. Si, deseo salir\n2. No, deseo volver a usarlo\n"); scanf("%d",&salir); }while(salir==2); return 0; system("pause"); }

[/b]

2 respuestas
NeB1

#5 pero es que veo un error que cometes de forma general, no sé si será el único, pero es el que más me xoca.

Si haces esto

libro libro[10];

Después para recorrerlo tienes que hacer esto:

for (i =0; i<10; i++)
{
     libro[i] = loquesea;
}

y no lo que tu haces que es esto:

for (i =1; i<=10; i++)
{
     libro[i] = loquesea;
}

ves la diferencia? en el segundo caso acabas accediendo a la posicion libro[10] que no existe. Se empieza a contar desde 0, y si has declarado un array de 10 elementos, las posiciones válidas son:
libro[0],libro[1],libro[2],libro[3],libro[4],libro[5],libro[6],libro[7],libro[8],libro[9].

1 respuesta
SikorZ

#6 Ni habia caido en eso jajaja gran verdad si señor xDD mira que es una tonteria, pero oye ya habre cometido ese error unas pocas de veces xDD

De todas formas no era eso lo que fallaba al borrar la tabla xD

void vaciar()
{
    int p[11];
    for(p=1;p<=10;p++);
    {
        strcpy(libro[p].nombre,"");
    }
 
}

Sabrias decirme que es lo que falla=/?

1 respuesta
NeB1

#7 vaya lío que llevas xDDD el bucle for necesita un elemento de tipo entero, no un array de enteros, como lo tenías antes vamos.

  
void vaciar() { int p; for(p=0;p<10;p++); { strcpy(libro[p].nombre,""); } }

Esto a priori parece correcto, dime que comportamiento observas o que es lo que falla, que error te dá. Me da perro instalarme el devc++ para probarlo yo xD

2 respuestas
SikorZ

#8 Voy a probarlo ahora mismo y te digo, tengo que presentar el programa despues del recreo xDD

1 respuesta
B

#8 #9 Eso va a petar porque para que vaya bien en el destino, el segundo operando, tiene que tener espacio suficiente para meter lo primero. Tendría que reservar memoria y hacer el strcpy a ese lugar.

2 respuestas
SikorZ

#10 Te equivocas.

Bueno ya esta presentado y todo bien:D

NeB1

#10 no tío, va al revés. El segundo operando se guarda en el primero.

1 respuesta
B

#12 Si, lo he visto luego xd

Usuarios habituales