Esercizio c

di il
15 risposte

Esercizio c

Ciao a tutti, avrei bisogno di una mano abbastanza "passo-passo" per chi si vuole divertire con me per fare questo esercizio.

non voglio la soluzione fatta, ma i pezzettini di codice che devono essere sviluppati per ottenerlo... discussi con me, si intende.

intanto dico che la soluzione che preferisco è quella utilizzando un header per le funzioni, quindi passare la direttiva di preprocessare #include "functions.h" sia all'inizio di functions.c sia all'inizio di main.c, e NON un unico file main.c con dentro tutto.

Poi, non capisco come passare i parametri dei dati (cognome nome):

io scriverò

fp = fopen(filename, "a");
FILE *ifp, *ofp;
char *mode = "r";
char outputFilename[] = "out.list";

ifp = fopen("in.list", mode);

ofp = fopen(outputFilename, "w");

if (ofp == NULL) {
  fprintf(stderr, "Can't open output file %s!\n",
          outputFilename);
  exit(1);
}
ma poi come inserisco espressamente il nome/cognome ecc?
grazie a chi mi aiuta!
Allegati:
11917_38b174b6acffe97ff6ea42c010a4ea02.gif
11917_38b174b6acffe97ff6ea42c010a4ea02.gif

15 Risposte

  • Re: Esercizio c

    Per le opzioni devi fare il parsing dei parametri passati alla riga di comando, quindi devi imparare ad usare il main sotto la forma
    
    int main(int argc, char**argv)
    
    P.s.: rimpicciolisci l'immagine.
  • Re: Esercizio c

    Io conosco questa procedura per fare il parsing..... ma poi?
        int commandlineoptions_parse(int commandlineoption_count,
        char** commandlineoption_values,
        struct commandlineoption **commandlineoptions,
        int *commandlineoptions_count);
  • Re: Esercizio c

    Qui stiamo parlando di standard. E quel comando non esiste nello standard. E' un listato fatto da terze parti.
    http://www.daccii.it/node/8

    Quindi devi leggere la riga di comando e trovare tutte le opzioni che sono state specificate. Significa fare a mano. sai leggere i dati passati da riga di comando e magari stamparli su video?
  • Re: Esercizio c

    Ho provato a buttare giu qualcosa....
    FILE *fp;
    fp = fopen (MY_FILE,"w");
    if (!fp) {
    printf ("Errore: impossibile aprire il file %s in
    scrittura\n",MY_FILE);
    return;
    }
    /* Scrivo su file */
    fputs (fp,"iNSERIRE NOME E COGNOME\n");
    
    
    
    #include <stdio.h>
    #include <stdlib.h>
    #define USER_FILE "anagrafe.txt"
    
    typedef struct {
    
    char nome[30];
    char cognome[30];
    char  via[50];
    int  numero[4];
    char  dataNascita[50];
    
    
    } nome;
    int main(void) {
    FILE *fp;
    nome n;
    if (!(fp=fopen(USER_FILE,"a"))) {
    printf ("Errore: impossibile aprire il file %s
    in modalità append\n",USER_FILE);
    exit(1);
    }
    printf ("=> Inseririmento di un nuovo utente <==\n\n");
    printf ("Nome: ");
    scanf ("%s",n.nome);
    printf ("Cognome: ");
    scanf ("%s",c.cogn);
    printf ("via: ");
    scanf ("%s",v.via);
    In questo modo ho creato il file pointer, e chiedo in input che venga inserito il nome cognome e via, dopo averli istanziati.
  • Re: Esercizio c

    Scusa se insisto ma stai buttando giù codice a caso. Sono spezzoni che non riescono a fare un programma neanche minimo. L'esercizio ti chiede di gestire i parametri passati per riga di comando e questo significa gestire argc e argv. se non sai come fare basta fare una ricerca su cosa sono e come vanno gestiti e se non ti sono chiari esprimi i quesiti. Buttare giù codice senza avere una meta non si va molto lontano.

    Esempio
    
    #include <stdio.h>
    
    int main(int argc, char **argv)
    {  
         int i = 0;
         if(argc == 1) //nessun parametro da commando
         {
              //stampo tutto
         }
         else
         {
            for(i = 1; i < argc; i++)
            {
               printf("%s\n",argv[i]);
            }
         }
    }
    
    Così stampi su schermo tutti i parametri passati su riga di comando. Adesso prossegui col esaminare i suddetti parametri.
  • Re: Esercizio c

    Allora andiamo con calma. forse ho espresso male le mie perplessità e cio di cui ho bisogno.

    prima di passare al codice, io ho bisogno di capire come strutturare il problema.

    Dunque io ho capito questo:

    punto1) archivio che contiene le informazioni nome cognome ecc..
    quindi qui io devo dichiarare le variabili che poi saranno utilizzate dall'intera classe e dalle funzioni.
    punto 2) il fatto che questo archivio sia gestito da un file esterno, fa pensare al fatto che io debba usare il file point.
    punto 3) cioe. mi sta dicendo che quando io richiamo una funzione, per esempio di inserire un nuovo residente, questo dovrà essere aggiunto al file.
    Inizialmente non esiste nessun file al primo avvio, se lo crea lui al primo inserimento (-i) giusto?
    e lo stesso dicasi per le altre opzioni, che stampa e cerca residenti.
    punto 4) vbbe, farò una chiamata exit(0), al termine dell'operazione richiesta.
    punto 5) gestione degli errori, quindi se inserisco solo il nome o solo il cognome oppure se esiste gia un record, non posso aggiungerlo.
    punto 6) ecco questo punto, se non ho capito male, mi sta dicendo semplicemente che oltre alle librerie standard <stdio.h>, devo creare le mie funzioni (opzioni) nel file dei prototipi , quindi devo fare un file.h dove mettere le mie funzioni. giusto?
    e poi, il makefile, che non ho mai usato e non so cosa sia...

    quindi è lo scheletro procedurale che mi serve, non il mero codice C.
    grazie mille
  • Re: Esercizio c

    Non vedo nulla circa le "opzioni che il programma deve gestire" (punto 3).
  • Re: Esercizio c

    Nell'immagine allegata all'inziio del post.

    il punto3) son le mie funzioni

    -i cognome nome eccc: per aggiungere una nuova persona
    -s per cercare
    -a e -v.... cè scritto.
  • Re: Esercizio c

    Non mi hai capito.

    -i -s -a -v

    sono delle opzioni da linea di comando. Ti ho chiesto di affrontare l'input di tali opzioni dalla linea di comando, cosa che ti è stata consigliata di fare ma che non hai elencato nell'ultimo post.
  • Re: Esercizio c

    Scusami, ma continuo a non capirti.
    cosa vuol dire "devi affrontare l'input" , per favore tagliamela a fette perchè non capisco cosa intendi.
  • Re: Esercizio c

    Intendevo chiederti di affrontare il problema suggerito da skynet, gli argomenti del main

    int argc, char **argv

    per accettare in input le opzioni da linea di comando.
  • Re: Esercizio c

    Guardando in internet, leggo che per gestire i parametri in ingresso del main, devo usare la libreria esterna getopt ... vi risulta?

    ps. probabilmente non ho capito nemmno molto bene nemmeno i suggerimenti di C, non capisco pressochè nulla di C, quindi sembro stupido perchè mi sembra arabo...
  • Re: Esercizio c

    andybmb88 ha scritto:


    guardando in internet, leggo che per gestire i parametri in ingresso del main, devo usare la libreria esterna getopt ... vi risulta?
    getopt è una funzione, non una libreria ed è usata con Linux/Unix.

    Come ti è stato detto da skynet, senza bisogno di cercare su internet né usare altre funzioni, devi gestire i parametri argc e argv del main che servono proprio per passare al programma i parametri da linea di comando.
    non capisco pressochè nulla di C(
    E questo è un problema perché stiamo in un forum in cui si parla di C ma in cui *non* si fanno lezioni di base di C. Quindi un minimo di preparazione tu lo devi avere per recepire i suggerimenti, altrimenti l'unico aiuto possibile è scriverti tutto il codice.
  • Re: Esercizio c

    Guarda, in java ancora ancora so farti una classe, so gestire array, stringhe, cicli, errori, classi derivate , extends ecc ec.

    Ma poi arrivo a fare C e mi sembra che si parli di cucina invece che di programmazione!ok che è procedurale e non Object Oriented, ma un minimo ...

    io cmq per (int argv *argc) so che argc è il numero dei parametri passati come argomento al programma,
    invece **argv e l'array che contiene questi parametri (argv[0] è il nome del programma )

    quindi devo dichiarare dopo la scritta int main(int argc, char *argv[]), i miei parametri -i,-a-v-s?
Devi accedere o registrarti per scrivere nel forum
15 risposte