ti ringrazio ma ancora non so creare un interfacci grafica e non conosco la libreria conio.h. System cls l'ho imparato prendendo spunto da un esempio...Se includi la libreria conio.h puoi tranquillamente eliminare quel system (“cls”) ed usare clrscr ed inoltre ti puoi creare una interfaccia grafica carina per il tuo programma ..
Inviato dal mio iPhone utilizzando Toms Hardware Italia Forum
typedef struct {int giorno;
int mese;
int anno;
}datazione;
typedef struct {int ore;
int minuti;
}orario;
typedef struct {char nome[N];
char descrizione[M];
char luogo[N];
orario ora;
datazione data;
char amici[N];
}record;
void aggiungi_record()
{
int a=0;
printf("Inserisci un titolo per il tuo record (max 29 char): ");
fgets(rec.nome, N, stdin);
printf("\nInserisci la descrizione del tuo record (max 149 char): ");
fgets(rec.descrizione, M, stdin);
printf("\nInserisci il luogo del tuo record (max 29 cahr): ");
fgets(rec.luogo, N, stdin);
printf("\nInserisci l'ora del tuo record: ");
printf("\n\t\t-ore: ");
scanf("%d", &rec.ora.ore);
printf("\n\t\t-minuti: ");
scanf("%d", &rec.ora.minuti);
printf("\nInserisci la data del tuo record: ");
printf("\n\t\t-giorno: ");
scanf("%d", &rec.data.giorno);
printf("\n\t\t-mese: ");
scanf("%d", &rec.data.mese);
printf("\n\t\t-anno: ");
scanf("%d", &rec.data.anno);
printf("\nInserisci gli amici che hanno partecipato (max 29 char): ");
fgets(rec.amici, N, stdin);
}
@DispatchCodeCiao
Questa é la structC:typedef struct {int giorno; int mese; int anno; }datazione; typedef struct {int ore; int minuti; }orario; typedef struct {char nome[N]; char descrizione[M]; char luogo[N]; orario ora; datazione data; char amici[N]; }record;
Dove sbaglio? Questa é la funzione che salva dati sulla struct
C:void aggiungi_record() { int a=0; printf("Inserisci un titolo per il tuo record (max 29 char): "); fgets(rec.nome, N, stdin); printf("\nInserisci la descrizione del tuo record (max 149 char): "); fgets(rec.descrizione, M, stdin); printf("\nInserisci il luogo del tuo record (max 29 cahr): "); fgets(rec.luogo, N, stdin); printf("\nInserisci l'ora del tuo record: "); printf("\n\t\t-ore: "); scanf("%d", &rec.ora.ore); printf("\n\t\t-minuti: "); scanf("%d", &rec.ora.minuti); printf("\nInserisci la data del tuo record: "); printf("\n\t\t-giorno: "); scanf("%d", &rec.data.giorno); printf("\n\t\t-mese: "); scanf("%d", &rec.data.mese); printf("\n\t\t-anno: "); scanf("%d", &rec.data.anno); printf("\nInserisci gli amici che hanno partecipato (max 29 char): "); fgets(rec.amici, N, stdin); }
Mi va direttamente a fare inserire la descrizione, senza il titolo. Alla fine non mi fa inserire niente negli amici...
E per non mischiarle come dovrei fare?scanf lascia il new line nel buffer. Aggiungi alla scanf anche \n. In alternativa dovresti aggiungere un getchar dopo la scanf, per ripulire il buffer.
Di solito si cerca di non mischiare quelle funzioni.
ho fatto cosi e funziona ma non so il perché, perche non ho capito come funziona getcharE per non mischiarle come dovrei fare?
getchar();
printf("Inserisci un titolo per il tuo record (max 29 char): ");
fgets(rec.nome, N, stdin);
printf("\nInserisci la descrizione del tuo record (max 149 char): ");
fgets(rec.descrizione, M, stdin);
printf("\nInserisci il luogo del tuo record (max 29 char): ");
fgets(rec.luogo, N, stdin);
printf("\nInserisci gli amici che hanno partecipato (max 29 char): ");
fgets(rec.amici, N, stdin);
printf("\nInserisci l'ora del tuo record: ");
printf("\n\t\t-ore: ");
scanf("%d", &rec.ora.ore);
printf("\n\t\t-minuti: ");
scanf("%d", &rec.ora.minuti);
printf("\nInserisci la data del tuo record: ");
printf("\n\t\t-giorno: ");
scanf("%d", &rec.data.giorno);
printf("\n\t\t-mese: ");
scanf("%d", &rec.data.mese);
printf("\n\t\t-anno: ");
scanf("%d", &rec.data.anno);
Ok sono riuscito a farlo funzionare. Ma ora ti chiedo: dato che é una gestione di un diario, come faccio a creare una nuova struttura ogni volta che devo aggiungere un nuovo record, a salvarla in una lista il tutto in un file? Il record é una structIo quando devo leggere tanti dati (praticamente sempre) uso sempre e solo fgets(), quindi metto tutto in una stringa che poi converto a seconda del caso (per esempio usando sscanf() ). In questo modo posso anche immettere più di un argomento, separati da qualsiasi carattere che voglio. E questo lo faccio in tutti i linguaggi di programmazione che conosco. In fondo non è che scrivo molto più codice, ma sono sicuro che non corro in problemi di conversione. Lo faccio anche per leggere file di testo (tipo .CVS) in quanto se sono corrotti me ne accorgo subito.
Uso la lista. Ma non riesco a capire un cosa.Una cosa per volta.
Devi raggruppare oggetti insieme, ossia una collezione (nel senso comune) di oggetti (in questo caso delle strutture). In C hai due possibilità, creare o un vettore o una lista. Cosa sia un vettore dovresti saperlo, se non sai cosa sia una lista devi studiarla. Bisogna scegliere tra i due candidati, in questo caso c’è un chiaro vincitore (lascio a te studiare il caso)
Una volta che abbiamo questa “collezione” (metto ancora tra virgolette perché “collection” in informatica ha un significato preciso che al momento possiamo mettere da parte) allora passeremo a parlare a come salvarla e poi leggerla da file.
typedef struct EL {Tipo_Elemento info;
struct EL *prox;
};
typedef EL ElemLista;
typedef ElemLista *ListaDiElem;
(ListaDiElem *Lista)
if(ListaVuota(*Lista))
Perché è un puntatore a un puntatore quello.Uso la lista. Ma non riesco a capire un cosa.
C:typedef struct EL {Tipo_Elemento info; struct EL *prox; }; typedef EL ElemLista; typedef ElemLista *ListaDiElem;
sul libro dopo che mi dichiara questa lista in una funzione che aggiunge elementi in coda alla lista mi mette tra i parametri questo:
Non riesco a capire cosa sia, perche ListaDiElem non é gia un puntatore?C:(ListaDiElem *Lista)
E poi all'interno della funzione mette
Questo che vuol dire?C:if(ListaVuota(*Lista))