RISOLTO Programma gestione diario

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.
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
 
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
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...
 
Ciao

C:
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;
Questa é la struct

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...
 
Ciao

C:
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;
Questa é la struct

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...
@DispatchCode

Inviato da Redmi 5 Plus tramite App ufficiale di Tom\'s Hardware Italia Forum
 
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.
 
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.
E per non mischiarle come dovrei fare?
--- i due messaggi sono stati uniti ---
E per non mischiarle come dovrei fare?
ho fatto cosi e funziona ma non so il perché, perche non ho capito come funziona getchar

C:
    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);
 
Ultima modifica:
Io 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.
 
Io 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.
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 struct
 
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.
 
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.
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:
C:
(ListaDiElem *Lista)
Non riesco a capire cosa sia, perche ListaDiElem non é gia un puntatore?

E poi all'interno della funzione mette
C:
if(ListaVuota(*Lista))
Questo che vuol dire?
 
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:
C:
(ListaDiElem *Lista)
Non riesco a capire cosa sia, perche ListaDiElem non é gia un puntatore?

E poi all'interno della funzione mette
C:
if(ListaVuota(*Lista))
Questo che vuol dire?
Perché è un puntatore a un puntatore quello.
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top