Ho provato ad editare così:
definition.h
codice:
#ifndef DEFINITION_H
#define DEFINITION_H
#define COST_NUM_CHAR 30 //Costante utilizzata per indicare il numero massimo dei caratteri nella stringa
#define COST_ELEM_MAX 20 //Costante utilizzata per indicare il numero massimo degli elementi nel vettore
typedef char string[COST_NUM_CHAR]; //definizione di un nuovo tipo di dato chiamato "string"
typedef enum{FALSE, TRUE} BOOLEAN; /*definizione di un nuovo tipo di dato chiamato "BOOLEAN" avente due soli
valori accettati: "FALSE" (valore 0) e "TRUE" (valore 1)*/
void stampa(BOOLEAN RITORNO_ADD); //funzione per avvisare l'utente se l'inserimento dei dati è avvenuto con successo
struct StringPool acquisizione(); //funzione per far inserire all'utente i dati
struct StringPool
{ //Struttura contenente due tipi di dati:
int identifier; //"identifier":dato di tipo int
string str; //"str":dato di tipo string
};
struct StringPool sp[COST_ELEM_MAX]; //definizione del vettore globale "sp" di grandezza "COST_ELEM_MAX"
//di tipo "StringPool"
#endif
main.c
codice:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include "definition.h"
#include "stringpool.c"
int main()
{
BOOLEAN NEW_INPUT=TRUE;
BOOLEAN RITORNO_ADD; //definizione variabili
struct StringPool TEMP_DATA;
int I=0;
for(I=0;I<COST_ELEM_MAX;I++)
{
*sp[I].str='\0'; //ciclo utilizzato per inizializzare il vettore "sp" con i seguenti valori:
sp[I].identifier=-1; //il campo "identifier" viene inizializzato con il valore "-1"
} //il campo "str" viene inizializzato con la stringa vuota
for(I=0;I<COST_ELEM_MAX && NEW_INPUT==TRUE;I++)
{
do{
/*questo ciclo do-while viene eseguito per far inserire all'utente i dati.
ciclerà fino a quando i dati immessi dall'utente non saranno inseriti nel vettore (cioè se si verifica
la seguente condizione: RITORNO_ADD==FALSE) e se l'utente vorrà inserire nuovi dati
(ciè se si verifica la seguente condizione:NEW_INPUT==TRUE)*/
TEMP_DATA=acquisizione(); //viene chiamata la funzione "acquisizione" che ritorerà un dato di tipo
//StringPool che verrà salvato nella variabile "TEMP_DATA"
//QUI SI CHIAMA LA FUNZIONE ADD CHE RITORNA UN VALORE BOOLEAN ALLA VARIABILE RITORNO_ADD E SI INVIA
//COME PARAMETRO LA VARIABILE TEMP_DATA
RITORNO_ADD = add(TEMP_DATA.identifier,TEMP_DATA.str);//Richiamo la funzione add della libreria stringpool.c
stampa(RITORNO_ADD); //viene chiamata la funzione "stampa" che manderà a schermo un diverso
//messaggio in base all'esito dell'inserimento
printf("\n Si vuole inserire un nuovo dato? (0=NO, 1=SI)");
do{
scanf("%d",&NEW_INPUT); //ciclo che chiede all'utente se si vuole
}while(NEW_INPUT<0 || NEW_INPUT>1); //inserire un nuovo dato.Il ciclo verrà
//eseguito fino a quando non si inserirà
// o 1 o 0
}while((NEW_INPUT==TRUE) && (RITORNO_ADD==FALSE));
}
system("pause");
}
struct StringPool acquisizione()
{
struct StringPool TEMP_DATA;
int errore_lettura; //flag di controllo per la lettura dell'id
int leggi;
do{
printf("\nInserire l'ID"); //ciclo per l'inserimento dell'ID.Ciclerà
scanf("%d",&TEMP_DATA.identifier);
//fino a quando non verrà immesso un numero positivo
}
while(TEMP_DATA.identifier < 0);
do{
printf("\nInserire la stringa"); //ciclo per l'inserimento della stringa.Ciclerà
scanf("%s",TEMP_DATA.str); //fino a quando non verrà immessa una stringa
}while(*TEMP_DATA.str=='\0'); //diversa dalla stringa vuota
return(TEMP_DATA);
}
void stampa(BOOLEAN RITORNO_ADD)
{
if(RITORNO_ADD==1)
{
printf("\nL'inserimento dei dati e' avvenuto con successo");
}
else
{
printf("\nErrore: inserimento non avvenuto");
}
/*in base all'avvenuto inserimento dei dati nel vettore, verrà stampato a video un messaggio diverso*/
}
e stringpool.c
codice:
#include "definition.h"
BOOLEAN add (int identifier, string str);
BOOLEAN add (int identifier, string str)
{
int spazio_vettore = -1; //Indice di controllo presenza spazio libero
int i; //Indice per il ciclo for di scansione
/*Se identifier hanno dati non corretti ritorna false*/
if((identifier < 1) || (strcmp(str,"") == 0))
{
return FALSE;
}
/*Controlla da 0 a minore del numero massimo di elementi
che l'identifier non è dupplicato e che ci sia almeno uno spazio vuoto
per l'inserimento*/
for(i=0;i<COST_ELEM_MAX;i++)
{
//se l'indice è dupplicato ritorna false
if(identifier == sp[i].identifier)
{
return FALSE;
}
//in caso di presenza di spazio vuoto, segna la prima posizione libera
if((sp[i].identifier == -1) && (spazio_vettore == -1))
{
spazio_vettore = i;
}
}
//se tutto è andato a buon fine alloca i dati nella struttura
if(spazio_vettore > -1)
{
sp[spazio_vettore].identifier = identifier;
strcpy(sp[spazio_vettore].str,str);
//debug
//for(i=0;i<COST_ELEM_MAX;i++)
//{
//printf("Debug[%d] %d - %s qqq \n",i,sp[i].identifier,sp[i].str);
//}
//debug
return TRUE;
}
else
{
return FALSE;
}
}
Ma mi da errore, mi dice "multiple definition of add".