RISOLTO Programma gestione diario

Stato
Discussione chiusa ad ulteriori risposte.

giammo82

Utente Attivo
1,210
525
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
 

Vito-

Utente Attivo
184
14
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...
 

Vito-

Utente Attivo
184
14
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...
 

Vito-

Utente Attivo
184
14
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
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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.
 

Vito-

Utente Attivo
184
14
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?
Post unito automaticamente:

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:

Andretti60

Utente Èlite
6,440
5,091
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.
 
  • Mi piace
Reazioni: Vito-

Vito-

Utente Attivo
184
14
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
 

Andretti60

Utente Èlite
6,440
5,091
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.
 

Vito-

Utente Attivo
184
14
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?
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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.
 
  • Mi piace
Reazioni: Vito-
Stato
Discussione chiusa ad ulteriori risposte.

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili