Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C] Switch per Menu' opzioni su Win ok Lin no!

    Ciao a tutti!

    Inizio col dire che sono agli inizi con la programmazione C quindi non me ne vogliate se il mio problema potrebbe risultarvi banale!


    Il codice qui sotto funziona come dovrebbe sotto Windows (Dev C++), mentre su linux (gcc) mi da dei problemi.

    La compilazione e' ok.
    Il problema avviene quando inserisco l'opzione voluta:

    Dopo averla inserita, viene eseguita l'istruzione associata all'opzione ma al ciclo successivo viene eseguita automaticamente l'istruzione default!

    Faccio un esempio:
    premo i, invio;
    introduco un numero, invio;

    a questo punto viene visualizzato di nuovo l'elenco delle opzioni ma automaticamente viene stampato "Errore di digitazione"! Successivamente mi stampa ancora l'elenco delle opzioni e posso quindi inserire un'altra opzione.


    codice:
    int main(){
    	char opt;
    	int d;
    	tree root;
    	tree trovato;
    	root = maketree();
    	
    	printf("Benvenuto!\n");
    	do {
    		printf("(i): inserisci elemento\n(o): stampa l'albero ordinato\n(p): stampare l'albero in preordine\n(c): cerca un elemento\n(f): stampa le foglie\n(r): rimuove tutte le foglie\n(x): esce dal ciclo di esecuzione del programma.\n");
    		fflush(stdin);
    		scanf("%c",&opt);
    		
    		switch(opt){
    				case 'i': {
    					printf("Introduci un intero:");
    					scanf("%d",&d);
    					inserisci(&root, d);
    					break;
    				}
    				case 'o': { stampaIN(root); break;}
    				case 'p': { stampaPREO(root); break;}
    				case 'c': {
    					printf("Introduci un intero da cercare:");
    					scanf("%d",&d);
    					trovato = trova(root,d);
    					if(trovato==NULL) printf("Elemento non trovato!");
    					else printf("Elemento trovato!\nL'elemento ha valore: %d \n", trovato->elemento);
    					break;
    				}
    				case 'f': { stampafoglie(root); break;}
    				case 'r': { pota(&root); break;}
    				case 'x': { distruggi(&root); break;}
    				default : printf("Errore di digitazione\n");
    		}
    	} while(opt!='x');
    	
    	fflush(stdin);
    	getchar();
    	return 0;
    }
    Credo che mi sia dimenticato di svuotare qualche buffer..
    ma non sono molto bravo con queste cose...

    Qualcuno ha qualche suggerimento?


    Grazie a tutti!

  2. #2
    le parentesi graffe sotto ogni case non sono necessarie,puoi evitarle,anche se scrivi + linee di codice(mentre,ad es,con l'if non č cosi' )

    Compilalo ed eseguilo cosi' per vedere se ti vā,senza aggiungere nulla:
    codice:
    #include<stdio.h>
    
    int main(){
    	char opt;
    	printf("Benvenuto!\n");
    	
    	do {
    		printf("(i): inserisci elemento\n(o): stampa l'albero ordinato\n(p): stampare l'albero in preordine\n(c): cerca un elemento\n(f): stampa le foglie\n(r): rimuove tutte le foglie\n(x): esce dal ciclo di esecuzione del programma.\n");
    		
    		opt=getchar();
    		
    		switch(opt){
    				case 'i': 
    					printf("\nHai scelto l'opzione 'i'\n");
    					break;
    				
    				case 'o':
    					printf("\nHai scelto l'opzione 'i'\n");
    					break;
    				
    				case 'p': 
    					printf("\nHai scelto l'opzione 'i'\n");
    					break;
    				
    				case 'c':
    					printf("\nHai scelto l'opzione 'i'\n");
    			        	break;
    				
    				case 'f':
    					printf("\nHai scelto l'opzione 'i'\n");
    					break;
    				
    				case 'r':
    					printf("\nHai scelto l'opzione 'i'\n");
    					break;
    					
    				case 'x':
    					printf("\nHai scelto l'opzione 'i'\n");
    					Break;
    					
    				default :
    					printf("Errore di digitazione\n");
    		}
    	} while( opt != 'x' );
    	
    	getchar();
    	return 0;
    }
    fammi sapere :gren:

    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.