Saltar a contenido


Foto

ayuda muy muy muy urgente con C ( OUENDAAAAAAAAAAAAAAAAN!!!)


  • Debes iniciar sesión para poder participar
26 respuestas en este hilo

#1 ashthedragon

ashthedragon
  • USUARIO BANEADO
  • 20951 mensajes
  • LocalizaciónPor ahí

Publicado 18 May 2008 - 05:04 PM

a ver...pensé que nunca tendría que hacer un hilo de estos xD pero...estoy desesperada.

tengo que entregar para mañana un trabajo en C, en el que se recojan unos datos de una estructura, de esa estructura se pase auna lista enlazada, y esa lista enlazada, guardarla en un fichero....no sé si me he explicado bien xD es una modificación a un programa que habiamos hecho anteriormente, en el que usando estructuras, recojiamos unos datos y bla boa bla... ahora, el profe quiere que en lugar de guardar las estructuras en ficheros, metamos los datos en listas enlazadas ( de estructuras) y volquemos esa lista, celda a celda, en el fichero, para luego hacer lo contrario, leer de fichero y volcar en lista de nuevo.

pues no tenog ni pajolera de como hacer eso.y se supone que tengoq ue entregar mañana el "trabajo", va con nota ( Y ME HACE MUCHA FALTA ESA NOTA, el examen del viernes, de esta asignatura, ha sido un completo PHAIL. precismanete, cayó este ejercicio....y valia 7 puntos.) mi idea es abrir el fichero, mu bien, recojer los datos y meterlo en la estructura, bien,pasar esa estructura a una celda de la lista enlazada, hasta ahi llego y....bien, no se ocmo guardar la lista en fichero, y por supuesto, no sé como leerla de fichero y meterla en lista de nuevo xD el tema de las listas enlazadas no lo he pillado bien, lo explicaron cuando estuve mala ( algunos se acordaran, que hará un mes o así, pille una infección gorda qe me tuvo bastante chunga un par de semanas..)y cuando volvi a clase, habia periddo el hilo completamente. el resto del curso he llvado programación bastante bien, sin suspender un examen..hast aahora >< mierda, como me quede este trimestre, toca repetir curso..si, solo por una asignatura. asi de joputas son, sin importar que en el resto tenga 8's y 9's. No he conseguido recuperar esa peridda de hilo >< estoy mas enterada que entonces, pero me falta "ese puntito" aun. en fin, djeo de quejarme, dejo mi codigo ( chapucero, las funciones están es una libreria "casera" creada por nosotros en clase, pero que el compilador no me la reconoce, cunado uso una fucion me dice que no existe...si te he puesto la libreria, coño! esa es otra...como hago para que me reconozca las librerias creadas por mi? usamos turbo C en clase.). por favor, necesito ayuda...xose....porfi....estoy desesperada, me estoy jugando el curso. mira que llevo ayer y hoy todo le tiempo dale que te pego a ver si saco algo en claro, y no...


#include
#include
#include
#include
struct s_libro {
char titulo [50];
char autor [50];
char editorial [50];
int ano;
char isbn [14];

};


void nuevolibro(void);

void consultarlibro(void);



void main (void)

{

int menu=0,submenu=0;
char seguir;
lista L;
FILE *fichero;
do
{
fichero=fopen("libros.dat","ab+");
if(fichero == NULL)
{
printf("Error al crear/acceder al fichero usuarios.dat");
}
else
{

L=crear();

do
{
fflush(stdin);
clrscr();
printf("\n********BIBLIOTECA VIRTUAL********");
printf("\n\n1-. LIBROS");
printf("\n2-. SALIR");
printf("\n Por favor, seleccione una opción: ");

scanf("%d",&menu);

switch(menu)
{
case 1:
{
fflush(stdin);
printf("\n ********LIBROS********");
printf("\n\n 1.- Nuevo libro.");
printf("\n 2.- Consultar libro.");
printf("\n Seleccione una opción: ");
scanf("%d",&submenu);
switch(submenu)
{
case 1 : nuevolibro();
break;
case 2: consultarlibro();
break;
default : printf("Opcion no valida. Introduzca una opcion valida");
}
}
break;
}
fflush(stdin);
printf("¿Quiere salir del programa? s/n ");
scanf("%c",&seguir);


}while((seguir!='s')||(seguir!='s'));

fwrite(libro,sizeof(libro),1,fichero);
fclose(fichero);
}
}

void nuevolibro(void)
{
/* Funcion que que mete libros en una escructura libro y los guarda en un fichero libros.bat

parametros:
no usa ningun parametro
devuelve:
no devuelve nada

*/
struct s_libro libro;
char sn;
do
{
fflush(stdin);
printf("\nIntroduzca titulo: ");
gets(libro.titulo) ;
fflush(stdin);
printf("\nIntroduzca autor: ");
gets(libro.autor);
fflush(stdin);
printf("\nIntroduzca editorial: ");
gets(libro.editorial);

printf("\nIntroduzca año de publicación: ");
scanf("%d",&libro.ano);
fflush(stdin);
printf("\nIntroduzca ISBN: ");
gets(libro.isbn);
fflush(stdin);
void insertar(libro,fin(L),L);


fflush(stdin);
printf("\n ¿Desea introducir otro libro? s/n: ");
scanf("%c",&sn);
fflush(stdin);
}while((sn=='s')||(sn=='S'));
}
void consultarlibro(void)
{
/*Funcion que busca un libro en un fichero libros.bat previamente creado,dando opcion a buscarlo por ISBN o por titulo del mismo.
Parametros:
No se le pasa ni usa ninguno.
Devuelve:
No devuelve nada.
*/
struct s_libro libro;
int opcion=0,comparacion;
char isbn[14],titulo[50],sn;
FILE *fichero;
do
{
printf("/n******** CONSULTAR LIBRO ********");
printf("\n 1.- Por ISBN");
printf("\n 2.- Por titulo");
printf("\n 3.- Listado Completo");
printf("\n Seleccione una opción: ");
scanf("%d",&opcion);
switch (opcion)
{

case 1:
{
fflush(stdin);

printf("\n Por favor, introduzca ISBN del libro que busca: ");
gets(isbn);
fflush(stdin);
do
{
if(elemento(posicion(*isbn,L),L)!=NULL);
{
printf("\n TITULO: %s ",libro.titulo);
printf("\n AUTOR: %s ",libro.autor);
printf("\n EDITORIAL: %s ", libro.editorial);
printf("\n AÑO DE PUBLICACION: %d ",libro.ano);
printf("\n ISBN: %s ",libro.isbn);
}
else
{

printf("\n No se ha encontrado el isbn especificado");
}




}
break;


fflush(stdin);
printf("\n ¿Desea hacer otra consulta? s/n: ");
scanf("%c",&sn);
fflush(stdin);
}while((sn=='s')||(sn=='S'));
}





Decir que la funcion " consultarlibro" no la he editado aun, hasta que no solucione los problemas de la anterior,la de meter...la otra es la de extraer. pliz, help? antes de mañana, cuantos antes mejor, pliz?


deberia usar un fwrite, verdad? peor que le digo? y tengo que leer los datos de fichero antes de hacer nada, verdad? fread? OUENDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN!!!!!!!!!!!!!!!!!
Imagen subida
Imagen subida

#2 xose

xose

    Administrator

  • Administradores
  • 7701 mensajes

Publicado 18 May 2008 - 06:51 PM

A ver, para empezar, curso intensivo de listas enlazadas xD

Una lista enlazada es un struct que contiene un campo de datos y un puntero al siguiente elemento (si es NULL, será el ultimo elemento). Ejemplo:

struct s_lista {
struct s_libro *libro;
struct s_lista *sig;
}

Para lo siguiente, suponer que la variable "struct s_lista lista" está definida (ya sea global o pasada por parámetro a una función)

Para introducir un nuevo dato, lo más comodo es hacerlo al principio. Así que usarías algo así:

struct s_lista nuevo;

nuevo->libro = nuevo_libro;
nuevo->sig = lista;
lista = nuevo;

Para recorrer la lista:

struct s_lista actual = lista;

while (actual->sig != NULL) {
struct s_libro libro = actual->libro;
// trabajar con libro
actual = actual->sig;
}

Si quieres ver algo más de código, puedes echarle un vistazo al código de glib, el cual yo "reutilizo" en mis prácticas bastante xD: gslist.h y gslist.c.

Luego le echo un vistazo al código. Pero te aviso que no tengo el Turbo C (ni posibilidad de instalarlo. Cosas de no usar Windows), así que igual hay diferencias.

EDIT: le he intentado echar un vistazo al código, pero faltan las funciones de lista. Seguramente tengas un problema ahí, porque en el código que has puesto no veo por que tendría que estar mal.

EDIT2: OK, leyendo otra vez tu mensaje, segun dices lo que no sabes es como leer/escribir de fichero. Pues tienes que hacerlo libro por libro. Para escribir, tienes que recorrer la lista, y por cada libro escribirlo con fwrite. Para leer, lees con fread el numero de bytes que tiene una estructura libro, si no se leen todos (mira el valor que devuelve fread) has terminado, en caso contrario, vas añadiendo cada libro a la lista.

EDIT3: Ejemplo:

Leer:

struct s_libro libro;
while (fread(&libro, sizeof(libro), 1, archivo) > 0) {
insertar(libro,fin(L),L);
}

Escribir (no se como son las funciones de escribir, así que pseudocodigo):

struct s_libro libro;
while(libro = siguiente(L)) {
fwrite(&libro, sizeof(libro), 1, archivo);
}

Reikai-firma.gif


#3 ashthedragon

ashthedragon
  • USUARIO BANEADO
  • 20951 mensajes
  • LocalizaciónPor ahí

Publicado 18 May 2008 - 07:38 PM

gracias xose! aunque me he quedado un poco igual, estoy bloqueada >< MARTILLAZOS A LA CABEZA!!!!!!!!!! YAA!!!!!!!



suspenderé y punto ><


mierda ><
Imagen subida
Imagen subida

#4 xose

xose

    Administrator

  • Administradores
  • 7701 mensajes

Publicado 18 May 2008 - 08:18 PM

Imagen subida

Si preguntas algo más específico, te echo una mano.

Reikai-firma.gif


#5 ashthedragon

ashthedragon
  • USUARIO BANEADO
  • 20951 mensajes
  • LocalizaciónPor ahí

Publicado 18 May 2008 - 08:34 PM

si es que ni siquiera tengo dudas concretas, tengo el cerebro bloqueado y soy incapaz de pensar ( en esto, al menos. en muerte y destruccion si ><) ains... gracias, de nuevo, por intentar prestarme ayuda >< es que llevo desde esta mañana a las 4, cuendo termine de comer...sin contar con ayer, que estuve desde las 11 que me levanté hasta las eje, 5 DE LA MAÑANA intentandolo sin levantarme del PC, solo para mear. estoy bloqueada.
Imagen subida
Imagen subida

#6 Henshin

Henshin
  • Reikainiano
  • 7100 mensajes

Publicado 18 May 2008 - 09:17 PM

xose, te ha faltado la imagen xd:

Imagen subida

OSU!!

#7 ashthedragon

ashthedragon
  • USUARIO BANEADO
  • 20951 mensajes
  • LocalizaciónPor ahí

Publicado 18 May 2008 - 10:07 PM

al final me las he apañado, le he pedido el trabajo a una compañera de clase y lo he copiado, a ver si cuela. algo es algo... aun asi, teniendo la certeza de que el codigo está bien, por que a mi compañera le funciona, a mi no, por la libreria casera esta, que la mia no tira xD pero si pongo la suya el profe se va a coscar que es copiado, asi que...que no compile, asi parece que lo he hecho yo.

gracias por intentar ayudarme, xose ^^ tras haber leido tus edits, he entendido mas o menos de que va esto. gracias!





EDIT:: un WTF que me acaba de pasar y me ha resultado curioso: he renombrado un archivo.c a pelo,es decir, desde la ventana de windows, y ha cambiado el peso del archivo, de 4.65 kb a 5 xDDDDD la gracia es que le he puesto un nombre notablemente mas corto! xDDDDDD
Imagen subida
Imagen subida

#8 Ultra_K

Ultra_K

    Ñam

  • Reikainiano
  • 3286 mensajes
  • LocalizaciónLovin' u

Publicado 18 May 2008 - 11:49 PM

xose, te ha faltado la imagen xd:

Imagen subida

OSU!!


Mira qué bien salgo ahí. Salgo en mi pose perfecta. :D

Jodo, pues ash, esperemos que apruebes. Ya nos contarás...

firma.png


#9 ashthedragon

ashthedragon
  • USUARIO BANEADO
  • 20951 mensajes
  • LocalizaciónPor ahí

Publicado 19 May 2008 - 11:38 AM

Al final, el joputa dle profe no ha recogido los trabajos por que "era una broma que os habia gastado" TANTO COMERME EL COCO PARA NADA:::??????? ( emoticono de ametralladora sonic world YA!) asi que..bueno, al menos me he salvado de momento xD
Imagen subida
Imagen subida

#10 Knudow

Knudow
  • Administradores
  • 21792 mensajes

Publicado 19 May 2008 - 11:40 AM

Dios, vaya profesor te gastas, xDDDD

#11 Sockles

Sockles
  • Reikainiano
  • 10724 mensajes

Publicado 19 May 2008 - 12:43 PM

Que joputa

#12 Ultra_K

Ultra_K

    Ñam

  • Reikainiano
  • 3286 mensajes
  • LocalizaciónLovin' u

Publicado 19 May 2008 - 12:52 PM

A mí me hace la misma gracia que a tí. ¿Para eso he tenido que gastar mi precioso tiempo e ir a animarte? :x

firma.png


#13 DaGuAr

DaGuAr
  • Administradores
  • 5297 mensajes

Publicado 19 May 2008 - 01:55 PM

Para tu profe el 19 de mayo debe de ser el día de los inocentes xD, así que ya sabes, al año que viene le gastas una broma tú xD.

#14 ashthedragon

ashthedragon
  • USUARIO BANEADO
  • 20951 mensajes
  • LocalizaciónPor ahí

Publicado 19 May 2008 - 06:07 PM

no e sla primera vez que nos hace putadas por el estilo ¬¬ hace unos dias, el lunes pasado si mal no recuerdo, nos hizo un examen sorpresa, sin avisar....de 5 preguntas, saqué una mal , dos regular y una bien xD

y daguar, el año que viene, si le veo, significaria que he repetido curso, mejor no verle xDDDDDDD
Imagen subida
Imagen subida

#15 Ultra_K

Ultra_K

    Ñam

  • Reikainiano
  • 3286 mensajes
  • LocalizaciónLovin' u

Publicado 19 May 2008 - 06:11 PM

.de 5 preguntas, saqué una mal , dos regular y una bien xD

¡¡AAARGH!! ¡HE OLVIDADO CÓMO SUMAR! :?

firma.png


#16 ashthedragon

ashthedragon
  • USUARIO BANEADO
  • 20951 mensajes
  • LocalizaciónPor ahí

Publicado 19 May 2008 - 06:15 PM

no si ya sabia yo que que me costara tanto jugar al sonic edusoft no era bueno xDDDDDD corrijo, una mal, dos regular, y dos bien.
Imagen subida
Imagen subida

#17 xose

xose

    Administrator

  • Administradores
  • 7701 mensajes

Publicado 19 May 2008 - 06:31 PM

Si es que los profesores de hoy en día son unos graciosillos...

Si te salió mal el examen, puedes decirle que tus respuestas eran de cachondeo porque pensabas que era una de sus bromas. Igual cuela xD

Reikai-firma.gif


#18 ashthedragon

ashthedragon
  • USUARIO BANEADO
  • 20951 mensajes
  • LocalizaciónPor ahí

Publicado 19 May 2008 - 06:36 PM

lo dudo, es graciosillo solo par alo que le interesa, por que lueog el muy cabrito si no entiendes algo, y le preguntas, te dice que "aah, lo siento, yo ya lo he explicado una vez". asi va la clase, que solo ibamos aprobando una compañera ( la que me ha dejado el trabajo) y yo....curiosametne, las dos uncias chicas de la clase...y ahora yo tb voy de culo, asi que solo ella xD
Imagen subida
Imagen subida

#19 xose

xose

    Administrator

  • Administradores
  • 7701 mensajes

Publicado 19 May 2008 - 06:44 PM

Que asignatura es? Por curiosidad...

Reikai-firma.gif


#20 Henshin

Henshin
  • Reikainiano
  • 7100 mensajes

Publicado 19 May 2008 - 06:45 PM

Me ofrezco a partirle las piernas :)




0 usuario(s) está(n) leyendo este hilo

0 miembros, 0 visitantes, 0 usuarios anónimos