|
|
|
![]() |
|
Strumenti |
![]() |
#21 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2773
|
Per non fargli scrivere quella scritta puoi aggiungere quel case che dicevo, che ignora il carattere di ritorno a capo.
A quel punto ti verrà stampato due volte il messaggio "\nPremi A se vuoi inserire un valore nello stack, B se vuoi estrarre un valore, X se vuoi uscire:\n" ma potresti metterlo in un if facendolo stampare solo quando selection è diverso da '\n' |
![]() |
![]() |
![]() |
#22 |
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
così?
case'X': case'x': exit=TRUE; break; case '\n': if(selection=!'\n') break; nn credo perchè nn mi torna ![]()
__________________
Ho concluso felicemente molte trattative su questo forum! |
![]() |
![]() |
![]() |
#23 | |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2773
|
Quote:
In questo modo quando viene letto l'invio non si entra nel case default. Fatto questo prova ad eseguire, immagino che ti stamperà due volte il messaggio che dicevo prima. A quel punto potresti mettere la stampa di quel messaggio in un if |
|
![]() |
![]() |
![]() |
#24 |
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
questo è il codice di ora che nn torna
Codice:
do{ exit=FALSE; if(selection=!'\n'){ printf("\nPremi A se vuoi inserire un valore nello stack, B se vuoi estrarre un valore, X se vuoi uscire:\n"); } selection=getchar(); scanf("%c", &selection); switch(selection) { case 'A': case 'a': result=TRUE; while(result==TRUE){ get_value(&value); result = push(&stack,value);} 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; case '\n': break; default : printf ("\nHai digitato un carattere diverso dai caratteri: A,B,X\n");
__________________
Ho concluso felicemente molte trattative su questo forum! |
![]() |
![]() |
![]() |
#25 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2773
|
Hai scritto =! invece di !=
Inoltre c'è un getchar inutile prima dello scanf. |
![]() |
![]() |
![]() |
#26 |
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
lo scanf prima dello switch?
lo ho tolto adesso come output: adesso dopo il buffer pieno mi compare...premi a o b o c poi : hai digitato un carattere diverso da abx e poi premi a o b o x ![]()
__________________
Ho concluso felicemente molte trattative su questo forum! |
![]() |
![]() |
![]() |
#27 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2773
|
Puoi postare di nuovo il codice completo? Quello che ho in locale mi funziona bene.
|
![]() |
![]() |
![]() |
#28 |
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
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); char selection; do{ exit=FALSE; if(selection!='\n'){ printf("\nPremi A se vuoi inserire un valore nello stack, B se vuoi estrarre un valore, X se vuoi uscire:\n"); } scanf("%c", &selection); switch(selection) { case 'A': case 'a': result=TRUE; while(result==TRUE){ get_value(&value); result = push(&stack,value);} 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; case '\n': break; default : printf ("\nHai digitato un carattere diverso dai caratteri: A,B,X\n"); } } while(exit==FALSE && selection!=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"); }
__________________
Ho concluso felicemente molte trattative su questo forum! |
![]() |
![]() |
![]() |
#29 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2773
|
C'è un errore nella funzione getvalue ecco la versione corretta:
Codice:
void get_value(float*value_ptr) // acquisisce un valore float da tastiera { printf("\n Inserisci un valore"); scanf("%f", value_ptr); } |
![]() |
![]() |
![]() |
#30 |
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
Adesso mi torna...per quel % mi faceva casino...grazie mille sei stato gentilissimo non so come avrei fatto senza di te...ti ringrazio di cuore wingman...
spero di n trovare combinazioni che mi creino bug...cmq grazie 20000000000 per adesso ![]() ![]() ![]() ![]() ![]() ![]() una domanda: possibile che l'ultimo valore da inserire melo stampi a video e dopo mi dica dopo : impossibile continuare ? perchè se metto stack size=10 mi stampa 11 valori ma nel pop l'ultimo inserito non mi compare...
__________________
Ho concluso felicemente molte trattative su questo forum! Ultima modifica di Solido : 24-02-2010 alle 01:52. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:43.