in dettaglio mi fermo molto presto ...
premessa: ho ipotizzato di creare una sorta di raccolta di libri.
sono riuscito a "svolgere" solo il primo punto (creare una nuova struttura) con scarsissimi risultati.
il secondo punto non capisco cosa voglia dire (non capisco cosa voglia intendere con "elemento" e poi la traccia non mi sembra poi così chiara). stesso discorso per il terzo
tornando al primo punto:
A parte il fatto che ci saranno sicuramente errori "sintattici", mi blocco proprio a livello logico quando devo aggiungere il nodo appena creato alla fine della mia lista... come faccio a "ricordare" dove finisce la mia lista? il passaggio su cui mi blocco è comunque segnalato nel codice allegato "struct_library.c"
ecco cosa ho combinato finora: (il main è abbastanza banale, pressoché inutile leggerlo ma lo allego ugualmente)
main.c
codice:
#include <stdio.h>
#include <stdlib.h>
#include "struct_library.h"
int main()
{
char key;
printf("\n\t- Benvenuto. Questo e' il menu:\n\n");
do
{
printf(" 1 - Crea una nuova struttura.\n");
printf(" 2 - Inserisci un nuovo elemento nella struttura.\n"); //???
printf(" 3 - Estrai un elemento della struttura.\n"); //???
printf(" 4 - Visualizza gli elementi della struttura.\n");
printf(" 5 - Salva il database su un nuovo file.\n");
printf(" 6 - Carica il database da un file.\n");
printf(" ... o premi 'Q' per uscire.\n");
printf("\n Inserisci il tuo comando: ");
fscanf(stdin, "%c%*c", &key); //mi prende il \0 !!!
fflush(stdin);
switch (key)
{
case '1':
nuovolib();
break;
case '2':
// insert();
break;
case '3':
// extract();
break;
case '4':
// view();
break;
case '5':
// save();
break;
case '6':
// load();
break;
case 'q':case'Q': break;
default:
printf("\n\t!!! COMANDO ERRATO, RIPROVA !!!\n");
}
}
while (key != 'Q' && key != 'q');
printf("\nHai chiuso la sessione. A presto!\n");
return (EXIT_SUCCESS);
}
struct_library.h
codice:
typedef struct rec *lpointer;
typedef struct rec {
char titolo[50];
float prezzo;
lpointer next;
} libro;
void aggiungi(lpointer pn);
void nuovolib();
void inserisci(lpointer* pins, lpointer pnodo);
struct_library.c
codice:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "struct_library.h"
void nuovolib()
{
lpointer nuovo;
nuovo = (lpointer) malloc(sizeof (libro));
printf("\nInserimento di un libro");
printf("\nTitolo : ");
fgets(nuovo->titolo, 100, stdin);
printf("Prezzo : ");
scanf("%f", &nuovo->prezzo);
aggiungi(nuovo);
return;
}
void aggiungi(lpointer pn)
{
lpointer *posins;
// funzione tale che posins=ultimo.next
inserisci(posins, pn);
}
void inserisci(lpointer* pins, lpointer pnodo)
{
*pins = pnodo;
}
in attesa che si accenda una lampadina :P
EDIT: ah e dimenticavo... non ho la più pallida idea di come separare le funzioni in due moduli distinti... ma quello (per ora) non è così grave...