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

    [C]Problema strano con While

    Ciao a tutti, ho usato il ciclo while nel mio source della calcolatrice V0.3

    Stranamente il ciclo while non funziona, mi fa saltare la parte dello scanf e mi dice che il risultato è 7.

    teoriacamente questo ciclo dovrebbe terminare quando come operatore inserisco il simbolo = ma non succede.

    Ho riguardato il source centinaia di volte eppure io penso che è tutto giusto...

    Guardate:

    codice:
    #include <stdio.h>
    #define PER_ARRAY 50
    
    int main () {
    	
    	int quante;
    	int partenza = 0;	
    	int numeri[PER_ARRAY];
    	char operatore[PER_ARRAY];
    	char *puntatore_operatore;
    	puntatore_operatore = operatore;
    	
    	
    	printf("Calcolatrice V0.3 \n");
    
    
    	
    	while(operatore[partenza] == '=') {
    		
    	    printf("Numero %d: \n", partenza );
    		scanf( "%d", &numeri[partenza]);
    		
    		
    		printf("Inserisci il tipo di operazione: + - * / \n Invece per il risultato digita = \n");
    		scanf(" %c",&operatore[partenza]);	
    		
    			partenza++;
    		}
    		
    	
    	int i, risposta= numeri[0];
    	for(i = 1; i < quante; i++)
    	{
    		if(operatore[(i - 1)]  == '*') {
    			risposta *= numeri[i];
    		}
    		else if(operatore[(i - 1)]  == '/'){
    			risposta /= numeri[i];
    		}
    		else if(operatore[(i - 1)]  == '-'){
    			risposta -= numeri[i];
    		}
    		else if(operatore[(i - 1)]  == '+'){
    			risposta += numeri[i];
    		}
    	}
    	printf("Il risultato è: %i", risposta);
    	
    	
    	
    	return 0;
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    codice:
     while(operatore[partenza] != '=') {
    Altrimenti il programma controlla il primo operatore, e se il primo operatore non è '=', termina subito senza fare il ciclo (dato che la condizione è subito falsa).
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  3. #3
    Grazie per la risposta, il discorso è che avevo gia provato con il != però anche se inserisco = il ciclo va avanti e non si ferma al input =


    Te sai il motivo?

  4. #4
    Credo di avere scritto il source tutto giusto, while si usa come l'ho usato, però perche si comporta in modo strano il programma? =(

    codice:
    #include <stdio.h>
    #define PER_ARRAY 50
    
    int main () {
    	
    	int partenza = 0;	
    	int numeri[PER_ARRAY];
    	char operatore[PER_ARRAY];
    	char *puntatore_operatore;
    	puntatore_operatore = operatore;
    	
    	
    	printf("Calcolatrice V0.3 \n");
    
    
    	
    	
    		while(operatore[partenza] != '=') 
    	{
    		
    	    printf("Numero %d: \n", partenza);
    		scanf( "%d", &numeri[partenza]);
    		
    	
    		while ((operatore[partenza] != '-') &&  (operatore[partenza] != '/') && (operatore[partenza] != '+') &&   (operatore[partenza] != '*') &&    (operatore[partenza] != '=')) {
    		
    		printf("Inserisci il tipo di operazione: + - * / \n Invece per il risultato digita = \n");
    		scanf(" %c",&operatore[partenza]);	
    		}
    			partenza++;
    		
    		}
    		
    	
    	int i, risposta= numeri[0];
    	for(i = 1; i < partenza; i++)
    	{
    		if(operatore[(i - 1)]  == '*') {
    			risposta *= numeri[i];
    		}
    		else if(operatore[(i - 1)]  == '/'){
    			risposta /= numeri[i];
    		}
    		else if(operatore[(i - 1)]  == '-'){
    			risposta -= numeri[i];
    		}
    		else if(operatore[(i - 1)]  == '+'){
    			risposta += numeri[i];
    		}
    	}
    	printf("Il risultato è: %i", risposta);
    	
    	
    	
    	return 0;
    }

    Numero 0:
    1
    Inserisci il tipo di operazione: + - * /
    Invece per il risultato digita =
    +
    Numero 1:
    4
    Inserisci il tipo di operazione: + - * /
    Invece per il risultato digita =
    +
    Numero 2:
    5
    Inserisci il tipo di operazione: + - * /
    Invece per il risultato digita =
    /
    Numero 3:
    2
    Inserisci il tipo di operazione: + - * /
    Invece per il risultato digita =
    =
    Numero 4:



    al posto di uscire numero 4 doveva stamparmi il risultato perche ho inserito = come mai fa questo?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    43
    penso sia perche fai il controllo del While prima della Scanf per qui non ha ancora un valore
    prova a fare un Do-While.
    ciao.

  6. #6
    Ciao, sto avendo lo stesso problema con un altro programma e abbiamo visto che il problema è che controlla la nuova array, quindi non sarà uguale a =.
    Si, in questo caso si deve usare proprio il do e while

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 © 2024 vBulletin Solutions, Inc. All rights reserved.