]l'ho migliorato adesso mi sembra che funzioni tutto l'unica cosa è che mi da tanti warring vi posto il nuovo sorgente secondo me dovrei usare un puntatore a puntatore per togliere i warring ma poi non li riesco a gestire nei vari sottoprogrammi ecco tutto il sorgente:
#include<stdio.h>
struct stack{
int vet[10];
int top;
int pieno,vuoto;
};
void inizializza(struct stack*);
int controlla_pieno(struct stack*);
int controlla_vuoto(struct stack*);
void inserisci(struct stack*,int);
int preleva(struct stack*);
void stampa(struct stack*);
int main(){
struct stack *stack1 = NULL ;
int scelta,contr_vuoto,numero,contr_pieno;
inizializza(&stack1);//pericolo"
do{
printf(" ______________________\n");
printf("|1:preleva.............|\n");
printf("|2:inserisci...........|\n");
printf("|3:stampa..............|\n");
printf("|4:inizializza.........|\n");
printf("|5:esci................|\n");
printf("!----------------------!\n");
scanf("%d",&scelta);
switch(scelta){
case 1: contr_vuoto=controlla_vuoto(&stack1);// pericolo!
if(contr_vuoto!=0)
{
numero=preleva(&stack1);// pericolo!!
printf("%d\n",numero);
}
else printf("errore stack vuoto\n");
break;
case 2:
contr_pieno=controlla_pieno(&stack1); //pericolo!!!
if(contr_pieno!=0)
{
printf("inserisci il valore\n");
scanf("%d",&numero);
inserisci(&stack1,numero);// pericolo!!
}
else
printf("errore stack pieno\n");
break;
case 3:
contr_vuoto=controlla_vuoto(&stack1);//pericolo!!!!
if(contr_vuoto!=0)
{
stampa(&stack1);// pericolo!!!!!
}
else
printf("impossibile stampare stack vuoto!\n");
break;
case 4:
inizializza(&stack1);//pericolo !!!!!!
break;
case 5:
printf("arrivederci\n");
break;
default: printf("scelta errata\n");
}
}while(scelta!=5);
}
void inizializza( struct stack *stack1){
stack1->top=0;
stack1->pieno=0;
stack1->vuoto=0;
}
int controlla_vuoto(struct stack *stack1){
if(stack1->top==0)
return(0);
else return 1;
}
int preleva(struct stack *stack1){
stack1->top--;
int x;
x=stack1->vet[stack1->top];
if(stack1->top==0)
stack1->vuoto=0;
return x;
}
int controlla_pieno(struct stack *stack1){
if(stack1->top==10)
return 0;
else return 1;
}
void inserisci(struct stack *stack1,int x){
stack1->vet[stack1->top]=x;
stack1->top++;
if(stack1->top==10)
{stack1->pieno=1;
}
}
void stampa(struct stack *stack1){
int x;
int i;
x=stack1->top--;
for(i=x;x--; ){
printf(" _______ \n");
printf(" | |\n");
printf(" %d \n ",stack1->vet[x]);
printf(" |_______|\n");
}
}