Discussione: [C] Help pseudo stack
View Single Post
Old 23-02-2010, 10:40   #1
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Cittā: Figline(FI)
Messaggi: 5847
[C] Help pseudo stack

Salve ragazzi...sto cercando di fare un programmino semplice che svolge il ruolo di trattare la memoria con la medesima politica di uno stack col linguaggio C....chiaramente mi limito solo alle operazioni push e pop ed eventuale falimento di queste...solo che l'output chiaramente non mi torna ( uso dev c++)

il codice č questo:

Codice:
//Inclusioni
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

//Definizioni per l'uso dei booleani
typedef unsigned short int Boolean;
#define TRUE 1
#define FALSE 0


struct stack{
       int size;
       int TOS;
       float * buffer;
       };
Boolean push(struct stack * ptr, float value);
Boolean pop(struct stack * ptr, float*value_ptr);
void get_value(float *value_ptr);
void print_value(float value);
void notify_push_failure(void); 
void notify_pop_failure(void);  
int init ( struct stack * ptr, int size);
int get_size(int*size_ptr);    
        
int main (void)
{
     struct stack stack;
     int size;
     float value;
     Boolean exit;
     Boolean result;
     init(&stack,size);
     get_size (&size);
     
     do{
          exit=FALSE;
          printf("\nPremi A se vuoi inserire un valore nello stack, B se vuoi estrarre un valore, X se vuoi uscire:\n");
     
          char selection;
          selection=getchar();
          switch(selection)
          {
                   case 'A':
                        get_value(&value);
                        result= push(&stack,value);
                        if (result==FALSE)
                        notify_push_failure();
                   break;
                   
                   case 'B':  
                         result= pop(&stack,&value);
                         if(result==TRUE)
                         print_value(value);
                         else
                         notify_pop_failure();
                   break;
                   
                   case'X':
                           exit=TRUE; 
                           break;
                           
                   default  :  printf ("\nHai digitato un carattere diverso dai caratteri: A,B,X\n");
        
          }
     
     } while(exit==FALSE && getchar()!=EOF );
    
     system("PAUSE");
}

int get_size(int*size_ptr)
{
     printf("\n Dimensione stack:\n");
     scanf("%d", &size_ptr);
}

int init ( struct stack * ptr, int size)
{
     ptr->size=size;
     ptr->TOS=0;
     ptr->buffer=(float*)malloc(size*sizeof(float));
}

Boolean push(struct stack * ptr, float value)
// se il buffer non č pieno allora restituisce TRUE
{
        if(ptr->TOS<ptr->size)
        {
             
            (ptr->buffer)[ptr->TOS]=value;
            (ptr->TOS)++;
            return TRUE;
        }
        else
        return FALSE;
}

Boolean pop( struct stack * ptr, float*value_ptr)
{
        if(ptr->TOS>0)
        {
              (ptr->TOS)--;
              *value_ptr=(ptr->buffer)[ptr->TOS];
              return TRUE;
        }
        else
               return FALSE;
                 
}        

void get_value(float*value_ptr)
// acquisisce un valore float da tastiera
{
              printf("\n Inserisci un valore");
              scanf("%f%, &value_ptr");
}

void print_value(float value)
{
     printf("\n Il valore estratto\x8A:%f", value);
}

void notify_push_failure(void)
{ 
     printf("\n Il buffer \x8A pieno. Impossibile inserire il valore!\n");
     
}

void notify_pop_failure(void)
{
     printf("\n Il buffer \x8A vuoto. Impossibile estrarre il valore!\n");
      
}
nell'output mi stampa a video due volte la stessa frase poi se richiedo l'operazione di pop mi crasha il programma...

Grazie mille gia da adesso
__________________
Ho concluso felicemente molte trattative su questo forum!
Solido č offline   Rispondi citando il messaggio o parte di esso