Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 27
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    33

    Problema creazione programma in C

    Salve a tutti. Sono nuovo nel forum.
    Da poco più di un mese ho iniziato a studiare elementi base (non in modo approfondito perché non mi serve) su come creare un programma in C, e uso come programma DevC++.
    Ieri ho voluto iniziare a provare la creazione di un programmino, e anche se mi sono aiutato con qualche esercizio quasi identico già svolto, non riesco ad andare avanti perché mi dà errore e non riesco a capire il perché.
    Il testo dell'esercizio è il seguente: "L'agenzia delle entrate vuole informatizzare l'elenco dei contribuenti, registrando nome, cognome, codice fiscale e indirizzo. Tali informazioni devono essere conservate in un file, sul quale deve essere possibile effettuare delle ricerche ed aggiornare i redditi dei contribuenti".
    Inoltre:
    1-L'autore deve predisporre una struttura con i campi nome e cognome, e deve immettere i propri dati in una variabile tramite la quale essi vanno stampati a schermo;
    2-Richiedere l'inserimento dei dati riguardanti il nuovo individuo e conservarli nella memoria RAM, e aggiungere ad un file con un nome prefissato (io ho scritto registro_cont.txt) i dati del nuovo individuo;
    3-Calcola il reddito medio degli individui presenti nell'elenco.

    Io sono rimasto fermo al punto 2. Di seguito metto il mio codice così vedete se riuscite a capire qual è l'errore che ho commesso. Preciso che voglio creare questo programma nel modo più semplice possibile, con il minimo indispensabile.

    ------------------------Inizio Codice-----------------------
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    #define FILE_PRED "registro_cont.txt"

    int main(int argc, char *argv[])
    {
    struct studente { //Stampa i dati dell'autore
    char nome[15];
    char cognome[15];
    } io={"Pinco","Pallino"};
    printf(" Autore del programma:\n");
    printf("------------------------------\n");
    printf(" Nome: %s\n Cognome: %s\n",io.nome,io.cognome);
    printf("------------------------------\n\n");

    //INIZIO DEL PROGRAMMA VERO E PROPRIO

    struct elenco {
    char nome[25];
    char cognome[25];
    char codice_fiscale[16];
    char indirizzo[30];
    };
    struct elenco registro_cont[100];

    int s, n=0;
    int inserisci (struct elenco registro_cont[100], int n);
    int salva (struct elenco registro_cont[100], int n);

    do {
    printf("Scegli dall'elenco l'opzione che desideri fare.\n");
    printf(" 1: Aggiungere nuovo individuo\n");
    printf(" 2: \n");
    printf(" 3: \n");
    printf(" 0: Uscita\n");
    scanf("%d", &s);
    switch(s){
    case 1:{n=inserisci(registro_cont,n);
    break;}
    case 2:{
    break;}
    case 3:{
    break;}
    case 0:{exit(0);
    break;}
    }
    }
    while(s!=0);
    system("pause");
    return 0;


    }

    int inserisci (struct elenco registro_cont[100],int n) { //Quando compilo mi da errore in questa riga
    if (n==100)
    printf("Non puoi aggiungere altri individui\n");
    else {
    printf("Inserisci nome: ");
    scanf("%s\n",registro_cont[n].nome);
    printf("Inserisci cognome: ");
    scanf("%s\n",registro_cont[n].cognome);
    printf("Inserisci codice fiscale; ");
    scanf("%s\n",registro_cont[n].codice_fiscale);
    printf("Inserisci indirizzo: ");
    scanf("%s\n",registro_cont[n].indirizzo);

    FILE *fp;
    fp=fopen(FILE_PRED,"a");
    if(fp==NULL)
    printf("Impossibile salvare!\n");
    else {
    fprintf(fp,"%s %s %s %s\n",registro_cont[n].nome);
    printf("---Salvato---");
    fclose(fp);
    }
    }
    }


    ---------------------------Fine Codice--------------------------

    Volevo provare a mettere la sezione "int inserisci (struct elenco registro_cont[100],int n) {....}" all'interno del "case 1", ma non mi funziona. Se è possibile mi dite come si fa anche questa parte?
    Grazie dell'aiuto.

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    nelle funzioni non va indicato il numero degli elementi dell'array da passare.. togli quel 100

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    33
    Se tolgo i "100" adesso mi da errore nella riga "case 1:{n=inserisci(registro_cont,n);".

  4. #4
    Originariamente inviato da giova212
    Se tolgo i "100" adesso mi da errore nella riga "case 1:{n=inserisci(registro_cont,n);".
    Ti dice solo "Error" o qualcosa di piu'?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    33
    Mi dice queste cose:

    In function `main':
    incompatible type for argument 1 of `inserisci'
    At top level:
    [Warning] "struct elenco" declared inside parameter list
    [Warning] its scope is only this definition or declaration, which is probably not what you want
    parameter `registro_cont' has incomplete type
    [Build Error] [001.o] Error 1

  6. #6
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    si ma perchè le dichiarazioni di strutture e funzioni sono tutte all'interno del main O_o?

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    33
    Ho modificato il codice e finalmente parte. Però c'è ancora un problema.
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define FILE_PRED "registro_cont.txt"
    
      struct studente {             //Stampa i dati dell'autore
             char nome[15];
             char cognome[15];
             } io={"Pinco","Pallino"};
             
      struct elenco {
             char nome[25];
             char cognome[25];
             char codice_fiscale[16];
             char indirizzo[30];
             };
    
      int inserisci (struct elenco registro_cont[100], int n);
      int salva (struct elenco registro_cont[100], int n);
               
    int main(int argc, char *argv[])
    {
             printf(" Autore del programma:\n");
             printf("------------------------------\n");
             printf(" Nome:      %s\n Cognome:   %s\n",io.nome,io.cognome);
             printf("------------------------------\n\n");
      
             //INIZIO DEL PROGRAMMA VERO E PROPRIO
    
      
      struct elenco registro_cont[100];
      
      int s, n=0;       
    
      
      do {
           printf("Scegli dall'elenco l'opzione che desideri fare.\n");
           printf(" 1: Aggiungere nuovo individuo\n");
           printf(" 2: \n");
           printf(" 3: \n");
           printf(" 0: Uscita\n");
           scanf("%d", &s);
                  switch(s){
                            case 1:{
                                   n=inserisci (FILE_PRED,n);   
                                   break;}
                            case 2:{
                                   break;}
                            case 3:{
                                   break;}
                            case 0:{exit(0);
                                   break;}
                            }                        
         } 
         while(s!=0);
         system("pause");
         return 0;
      
    
    }
    
     int inserisci (struct elenco registro_cont[100],int n) {              //Quando compilo mi da errore in questa riga
                                   if (n==100)
                                       printf("Non puoi aggiungere altri individui\n");
                                   else {
                                       printf("Inserisci nome: ");
                                       scanf("%s\n",registro_cont[n].nome);
                                       printf("Inserisci cognome: ");
                                       scanf("%s\n",registro_cont[n].cognome);
                                       printf("Inserisci codice fiscale; ");
                                       scanf("%s\n",registro_cont[n].codice_fiscale);
                                       printf("Inserisci indirizzo: ");
                                       scanf("%s\n",registro_cont[n].indirizzo);
                                    
                                       FILE *fp;
                                       fp=fopen(FILE_PRED,"a");
                                          if(fp==NULL)
                                             printf("Impossibile salvare!\n");
                                          else {
                                             fprintf(fp,"%s %s %s %s\n",registro_cont[n].nome);
                                             printf("---Salvato---");
                                          fclose(fp);
                                           }
                                      }
     }
    Quando compilo si apre il programma, premo 1 e mi dice "Inserisci nome:" dopodiché si apre la scermata di Windows di errore che dice che si è verificato un errore e l'applicazione verrà chiusa. In pratica dopo che inserisco il nome non mi chiede il cognome ed il resto.

  8. #8
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Il codice va tra tag code.. letto il regolamento??

    cmq continui a mettere quel 100 nel prototipo della funzione e anche in definizione.. non ci va

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    33
    Scusami, mi era sfuggito.

  10. #10
    Originariamente inviato da giova212
    Ho modificato il codice e finalmente parte. Però c'è ancora un problema.
    codice:
    #define FILE_PRED "registro_cont.txt"
    ...
    
      int inserisci (struct elenco registro_cont[100], int n);
     ...
                            case 1:{
                                   n=inserisci (FILE_PRED,n);   
                                   break;}
     ...
    Passi una stringa costante come primo argomento della "inserisci", ma lei gradirebbe un array di "struct elenco". Con le opportune opzioni di compilazione, il compilatore ti dovrebbe avvertire.
    Ad esempio:
    codice:
    $ gcc -Wall main.c 
    main.c: In function 'main':
    main.c:46: warning: passing argument 1 of 'inserisci' from incompatible pointer type
    main.c:32: warning: unused variable 'registro_cont'
    main.c: In function 'inserisci':
    main.c:81: warning: too few arguments for format
    main.c:86: warning: control reaches end of non-void function

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.