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