#define MaxPila 100
typedef int TipoElemPila;
struct tipoPila{
TipoElemPila pila[MaxPila];
int pos;
};
typedef struct tipoPila TipoPila;
//Per la pila vuota: p.pos viene scelta pari a -1
void InitPila(TipoPila *p);
void Inserimento(TipoPila *p, int n);
void Stampa(TipoPila p, int n);
bool TestPilaPiena(TipoPila p);
int main()
{
TipoPila P;
InitPila(&P);
Inserimento(&P, 5);
Stampa(P, 5);
}
void InitPila(TipoPila *p)
{
p -> pos = - 1;
}
void Inserimento(TipoPila *p, int n)
{
if(TestPilaPiena(*p))
{
printf("Pila piena!");
return;
}
int i;
for(i = 0; i < n; i++)
{
printf("p->pila[%d]: ", p->pos);
scanf("%d", &p->pila[p->pos]);
p->pos++;
}
}
void Stampa(TipoPila p, int n)
{
int i;
p.pos = -1;
for(i = 0; i < n; i++)
{
printf("[%d]", p.pila[p.pos]);
p.pos++;
}
}
bool TestPilaPiena(TipoPila p)
{
if(p.pos == MaxPila - 1)
return true;
return false;
}
Quando eseguo, questo è quello che accade:
p->pila[-1]: 1
p->pila[0]: 2
p->pila[1]: 3
p->pila[2]: 4
p->pila[3]: 5
Stampa:
[0][2][3][4][5]
1) Perché nella stampa il primo elemento è 0 e non 1 (come dovrebbe essere)?
2) Cambiando
typedef int TipoElemPila; in
typedef char TipoElemPila; nonostante nello scanf cambi %d con %c ecco cosa accade:
p->pila[-1]: 1
p->pila[0]: p->pila[1]: 2
p->pila[2]: p->pila[3]: 3
Non mi fa inserire i valori correttamente. Perché?
Invece se mettessi %s nell scanf e %c nella stampa:
p->pila[-1]: a
p->pila[0]: b
p->pila[1]: c
p->pila[2]: d
p->pila[3]: e
Stampa:
[][c][d][e]
Sempre lo stesso problema..