Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <assert.h>
- #include <string.h>
- struct Libro {
- char titulo[100];
- char autor[100];
- int paginas;
- struct Libro* siguiente;
- };
- void imprimirLibro(struct Libro* lib) {
- printf("Titulo: '%s'\n", lib->titulo);
- printf("Nombre '%s'\n", lib->autor);
- printf("Paginas '%i'\n", lib->paginas);
- }
- void escribirLibro(struct Libro* lib, FILE* f) {
- fputs((*lib).titulo, f);
- fputs(",", f);
- fputs(lib->autor, f);
- fputs(",", f);
- char paginas[17];
- itoa(lib->paginas, &paginas, /*base*/10);
- fputs(paginas, f);
- fputs("\n", f);
- }
- int buscarComa(char* cadena, int inicio, int tamano) {
- for(int i = inicio; i < tamano; ++i) {
- if(cadena[i] == ',') {
- return i;
- }
- }
- return -1;
- }
- struct Libro* crearLibro() {
- struct Libro* lib = malloc(sizeof(struct Libro));
- lib->titulo[0] = '\0';
- lib->autor[0] = '\0';
- lib->paginas = 0;
- lib->siguiente = NULL;
- return lib;
- };
- struct Libro* deserealizarLibro(char* cadena, int tamano) {
- struct Libro* lib = crearLibro();
- assert(lib);
- int coma1 = buscarComa(cadena, 0, tamano);
- strncpy(lib->titulo, cadena, coma1);
- lib->titulo[coma1] = '\0';
- int coma2 = buscarComa(cadena, coma1+1, tamano);
- strncpy(lib->autor, cadena+coma1+1, coma2-coma1-1);
- lib->autor[coma2-coma1-1] = '\0';
- char paginas[6];
- strncpy(paginas, cadena+coma2+1, tamano-coma2);
- paginas[tamano-coma2] = '\0';
- lib->paginas = atoi(paginas);
- return lib;
- }
- void imprimirLista(struct Libro* lista) {
- struct Libro* actual = lista;
- while(actual) {
- imprimirLibro(actual);
- actual = actual->siguiente;
- }
- }
- struct Libro* agregarLibro() {
- struct Libro* lib = crearLibro();
- printf("Titulo:");
- gets(lib->titulo);
- printf("Autor:");
- gets(lib->autor);
- printf("Paginas:");
- scanf("%i", &lib->paginas);
- char enter;
- scanf("%c", &enter);
- return lib;
- }
- void agregarALista(struct Libro** cabeza, struct Libro* nuevo) {
- if(!cabeza) {
- cabeza = nuevo;
- } else {
- struct Libro* actual = *cabeza;
- while(actual->siguiente) {
- actual = actual->siguiente;
- }
- actual->siguiente = nuevo;
- }
- }
- int main()
- {
- //struct Libro l1;
- //strcpy(l1.autor, "Tolstoy");
- //strcpy(l1.titulo, "La guerra y la paz");
- //l1.paginas = 1000;
- FILE* archivo = fopen("helloworld.txt", "r");
- if(!archivo) {
- printf("El archivo no se pudo abrir");
- return 1;
- }
- int tamano;
- char linea[10000];
- int len;
- struct Libro* lista = NULL;
- while( fgets(linea, 10000, archivo) ) {
- struct Libro* lib = deserealizarLibro(linea, strlen(linea));
- if(!lista) {
- lista = lib;
- } else {
- struct Libro* actual = lista;
- while(actual->siguiente) {
- actual = actual->siguiente;
- }
- actual->siguiente = lib;
- }
- }
- fclose(archivo);
- int opcion = -1;
- do {
- printf("0) Salir, 1) Mostrar, 2) Agregar, 3) Quitar \n Opcion:");
- scanf("%d", &opcion);
- char enter;
- scanf("%c", &enter);
- switch(opcion) {
- case 1:
- imprimirLista(lista);
- break;
- case 2: {
- struct Libro* lib = agregarLibro();
- agregarALista(&lista, lib);
- }
- default:
- break;
- }
- } while(opcion != 0);
- //escribirLibro(&l1, archivo);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement