oregon ha scritto:
Nella funzione nuova_fila manca il
return fila;
Ah.. giusto.. Grazie!
Un'altra cosa:
Persona* servi_capofila(Persona fila[]);
//restituisce un nuovo array ottenuto da fila eliminandone capofila da fila ed avanzando le
//restanti persone di una posizione;
Va bene se allocassi un nuovo array di tipo Persona, di dimensione -1 rispetto a quello attuale e scrivendo su tutti gli elementi saltando il primo?
Se andasse bene questo, per poter allocare un nuovo array di dimensione n-1 rispetto all'originale mi occorrerebbe proprio conoscere dimensione. E dato che l'ultimo elemento dell'array è un marcatore, cioè nome e cognome sono vuoti, avevo pensato ad una cosa del genere:
int i = 0;
while(fila[i].nome != " ")
i++;
printf("%d", i);
Solo che non mi stampa niente. Come mai?
Ti riallego il codice.
main.c
#include "definizioni.h"
int main()
{
//Persona *fila, *punt; //Puntatore alla fila
Persona *fila, *punt;
int res;
/* ********************************************* */
//Creazione della lista (vuota)
fila = nuova_fila();
/* ********************************************* */
//Controllo lista vuota o meno
res = is_empty(fila);
if(res == 1)
printf("\nLa fila e' vuota.\n");
else
if(res == 0)
printf("\nLa fila non e' vuota.\n");
/* ********************************************* */
punt = capofila(fila);
printf("\nDati relativi al capofila: ");
printf("\n");
printf("Nome: %s", punt->nome);
printf("\n");
printf("Cognome: %s", punt->cognome);
printf("\n");
/* ********************************************* */
Persona *new_lista;
new_lista = servi_capofila(fila);
}
funzioni.c
#include "definizioni.h"
Persona *nuova_fila()
{
Persona *fila;
int n, i, m = 1;
printf("Elementi fila?");
scanf("%d", &n);
n++;
if(n == 0)
return fila = NULL;
//Allocazione dinamica della fila
fila = (Persona*) malloc (n * sizeof(Persona));
for(i = 0; i <= n; i++)
{
if(i < n-1)
{
printf("\nElemento %d della fila.\n", m);
printf("Nome: "); scanf("%s", fila[i].nome);
printf("Cognome: "); scanf("%s", fila[i].cognome);
}
else
if(i == n)
{
printf("\nElemento %d della fila marcatore.\n", i);
strcpy(fila[i].nome, " ");
strcpy(fila[i].cognome, " ");
}
m++;
}
return fila;
}
int is_empty(const Persona fila[])
{
if(fila == NULL)
return 1;
else
if(fila != NULL)
return 0;
}
Persona* capofila(Persona fila[])
{
if(fila == NULL)
return NULL;
else
if(fila != NULL)
return &fila[0];
}
Persona* servi_capofila(Persona fila[])
{
if(fila == NULL)
return NULL;
else
if(fila != NULL)
{
int i = 0;
while(fila[i].nome != " ")
{
i++;
}
printf("n: %d", i);
}
}
Con eliminazione si intende proprio di riallocare oppure di eliminare nel verso senso della parola quell'elemento dalla cella [0] ? In tal caso come si cancella il contenuto di una cella di un array? Grazie