Programmazione Modulare - Problema definizione variabili

di il
7 risposte

Programmazione Modulare - Problema definizione variabili

Ragazzi non capisco perchè ma facendo la programmazione modulare non mi riconosce nel file utenti.c la struttura che ho creato, sapreste dirmi se ho sbagliato in qualcosa? il codice è il seguente:

MAIN.C
#define BUFFER_SIZE 1024

//Librerie generali
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <ctype.h>
#include <windows.h>

#include "utenti.h"
#include "util.h"


int main(){
	
	titolo();
    
    int scelta;
    utente *testa_Utente = NULL;
    
    //Lettura utenti dal file
    FILE *fpU;
    fpU = fopen("utenti.csv", "r");
    
    testa_Utente = lettura_Utenti(fpU);
	
	 do {
        
        printf("\t \t \t 1. Login \n \n");
        printf("\t \t \t 2. Registrazione \n \n");
        printf("\t \t \t 3. Esci \n \n");
        printf("\t \t \t \t Scelta : ");
        scanf("%d", scelta);
        
        //Ripulisco la schermata
        clear_Console();
        titolo();
        
        switch (scelta) {
        	             
			/* REGISTRAZIONE Utente */   
            case 2:
            	printf("Benvenuto! \n Crea il tuo account \n");
                registrazione_utente(testa_Utente);
                clear_Console();
                titolo();
                break;
                
            default:
                clear_Console();
                titolo();
                break;
        }
        printf("-----------------------------\n");
        
    } while (scelta != 0);
    
    printf("\n");
    return 0;

	
system("PAUSE");
return 0;


}

UTENTI.H
/* utenti.h */

#include "utenti.c"

//Definizione struct UTENTE	
typedef struct utente utente;

extern void registrazione_utente (utente *testa);

extern int lettura_UltimoID(utente *testa_utente);

extern Utente *lettura_Utenti(FILE *fp);
UTENTI.C
/* utenti.c */

#define Char_size 20
 struct utente {
    int id;
    char nome[Char_size];
    char cognome[Char_size];
    char nick[Char_size];
    char password[Char_size];
    int permessi; // livello 1 = utente normale; livello 2 = admin (ha accesso a tutto);
    struct utente *next_Utente; //puntatore al prossimo nodo
};
 
 /*
 * Funzione: registrazione_utente
 * ----------------------------
 *   Permette la registrazione di un nuovo utente, con salvatggio dei dati sul file "utenti.csv" nella struct utente
 *
 *   @param testa : puntatore all'inizio lista utenti, una lista contenente tutte gli utenti caricati dal file "utenti.csv"
 */
 [color=#804080][color=#FF0000]void registrazione_utente (utente *testa) {[/color][/color]
    
	// Puntatori a variabili tipo utente : Salvataggio in TESTA alla lista
	utente *nuovo_Nodo = NULL;
    utente *temp;
    utente *curr, *prec;
    prec = NULL;
    curr = testa;

    nuovo_Nodo = (utente *)malloc(sizeof(utente));
	
	// ? ------------------------------------------
    int ultimoID=0, i; 
	
	//flag test_Input = TRUE : errore inserimento
    bool test_Input = false; 
    bool continua_Inserimento = true;
    //flag per controllare univocità del campo nickname
	bool flag = false; 
    
    // Apertura File con lista utenti
    FILE *fp;
    fp = fopen("utenti.csv", "a+");

	/* Inserimento NOME */
    do {
        test_Input = false;
        printf("\t \t \t Nome: ");
        fgets(nuovo_Nodo -> nome, Char_size, stdin);
        
        // Prima lettera in MAIUSCOLO e ultimo carattere è 0
        nuovo_Nodo->nome[strlen(nuovo_Nodo -> nome) - 1] = 0;
        nuovo_Nodo->nome[0] = toupper(nuovo_Nodo -> nome[0]);
		
		// Campo Nome non compilato
        if (strlen(nuovo_Nodo -> nome) == 0) {
            continua_Inserimento = false;
            clear_Console();
            titolo();
            break;
        }

        if (test_Input == true) {
            clear_Console();
            titolo();
            puts("\t \t \t ----------");
            printf("\t \t \t Attenzione!");
            puts("\t \t \t \n Nome non valido.");
            puts("\t \t \t -----------------------------");
        }

    } while (test_Input == true); // WHILE cicla per vero
    
    /* Inserimento COGNOME */
    if (continua_Inserimento == true) {

        clear_Console();
        titolo();

        do {
            test_Input = false;
        	printf("\t \t \t Cognome: ");
        	fgets(nuovo_Nodo -> cognome, Char_size, stdin);
        
        	// Prima lettera in MAIUSCOLO e ultimo carattere è 0
        	nuovo_Nodo -> cognome[strlen(nuovo_Nodo -> cognome) - 1] = 0;
        	nuovo_Nodo -> cognome[0] = toupper(nuovo_Nodo -> cognome[0]);
		
			// Campo Cognome non compilato
       		if (strlen(nuovo_Nodo -> cognome) == 0) {
            continua_Inserimento = false;
            clear_Console();
            titolo();
            break;
        }
       
        fclose(fp);

        //Inserimento in TESTA
            nuovo_Nodo -> next_Utente = testa;
            testa = nuovo_Nodo;   

        clear_Console();
        titolo();
        printf("\t \t \t Registrazione avvenuta con successo.\n");
        printf("\t \t \t Benvenuto/a %s. \n", nuovo_Nodo -> nome);
        pausa();

    }
}

Ho cercato di ridurre il codice. L'errore sorge sulla stringa in rosso ed è il seguente:
- [Error] unknown type name 'utente'

7 Risposte

Devi accedere o registrarti per scrivere nel forum
7 risposte