Discussione: [C] Help pseudo stack
View Single Post
Old 23-02-2010, 22:56   #9
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
si ok ma non capisco il senso! il motivo cè che getchar() prendeo INVIO come carattere? se si in che modo?

case: '\n'
break;


e basta oppure una cosa:

int invio;
printf(" - Premi INVIO per continuare - \n");
invio = getchar();[/b]

poi nn capisco il senso del punto 6 del tuo intervento di prima. In che senso ho A nel buffer?
io voglio digitare n numeri dove n=sizeofbuffer e quindi avrò solo numeri nel buffer e non caratteri...
cmq nn ho capito bene quello che mi dici e se ti sta fatica correggermi il codice nn importa..pace, ma fatto sta che per ora non torna molto bene!!!


per ora il codiece è così:
Codice:
//Inclusioni
#include <stdio.h>
#include <stdlib.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 getchar (void);
  
        
int main (void)
{
     struct stack stack;
     int size;
     float value;
     Boolean exit;
     Boolean result;
     get_size (&size);
     init(&stack,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;
         int invio;
          selection=getchar();
          scanf("%c", &selection);
          switch(selection)
          {
                   case '\n':
                        printf( " Inserisci un valore");        
                   case 'A':
                   case 'a':
                        get_value(&value);
                        result = push(&stack,value);
                        if (result==FALSE)
                        notify_push_failure();
                       
                   break;
                   
                   case 'B':
                   case 'b':  
                         result= pop(&stack,&value);
                         if(result==TRUE)
                         print_value(value);
                         else
                         notify_pop_failure();
                   break;
                   
                   case'X':
                   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:");
     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");
      
}
E non torna!!!
grazie
__________________
Ho concluso felicemente molte trattative su questo forum!

Ultima modifica di Solido : 23-02-2010 alle 23:01.
Solido è offline   Rispondi citando il messaggio o parte di esso