Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C] while - valore sentinella

    ragazzi è sicuramente una stupidaggine, ho ritrovato questo programma fatto un po di tempo fa e mi sono accorto che inserendo il valore -1 (sentinella) l'iterazione non si ferma subito ed esce dal ciclo...ma continua a prendere in input le restanti variabili....perchè?

    codice:
    #include <stdio.h>
    
    int main(){
        
        float newSaldo = 1;
        
        float creditLimit, saldoImese, totCrediti, artConto;
        int nConto;
        
        
           printf("Inserire numero di conto = ");
           scanf("%d", &nConto);
           
           printf("Inserire saldo inizio mese = ");
           scanf("%f", &saldoImese);
           
           printf("Inserire totale degli articoli in conto = ");
           scanf("%f", &artConto);
           
           printf("Inserire totale dei crediti = ");
           scanf("%f", &totCrediti);
           
           printf("Inserire limite di conto = ");
           scanf("%f", &creditLimit);
           
           printf("\n");
           
           
        while(nConto != -1){
                         
           newSaldo = saldoImese + artConto - totCrediti;
           
              printf("Inserire numero di conto = ");
              scanf("%d", &nConto);
           
              printf("Inserire saldo inizio mese = ");
              scanf("%f", &saldoImese);
           
              printf("Inserire totale degli articoli in conto = ");
              scanf("%f", &artConto);
           
              printf("Inserire totale dei crediti = ");
              scanf("%f", &totCrediti);
           
              printf("Inserire limite di conto = ");
              scanf("%f", &creditLimit);
           
              printf("\n");
           
              if(newSaldo > creditLimit){
                 printf("NUMERO DI CONTO = %d\n", nConto);
                 printf("LIMITE DI CREDITO = %.2f\n", creditLimit);
                 printf("NUOVO SALDO = %.2f\n", newSaldo);
                 printf("******** IL SUO CREDITO HA RAGGIUNTO IL LIMITE ********\n");
              }/* FINE if */
           }/* FINE while */
           
           system ("pause");
           return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Il valore viene controllato nella while, quindi dopo che tutte le scanf sono eseguite ... (il funzionamento del while ti è chiaro?)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    si questo l'avevo capito...dopo quella sera che non riuscivo a fare il "turtle graphics" e tu mi hai detto/chiesto se avevo qualche nozione di questo linguaggio .....ho ripreso a studiare dall'inizio tutto fila e per segno.... (molte cose le avevo tralasciate) comunque senza inserire un nConto in un IF, si potrebbe modificare il ciclo while per ottenere un'uscita quando nConto è -1???

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    No ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5

  6. #6
    HO TROVATO LA SOLUZIONE.....

    il while è impostato bene così com'è...basta mettere due input uno prima del while e uno subito prima la sua chiusura.

    codice:
    #include <stdio.h>
    
    int main(){
        
        float newSaldo = 1;
        
        float creditLimit, saldoImese, totCrediti, artConto;
        int nConto;
        
        
           printf("Inserire numero di conto = ");
           scanf("%d", &nConto);
           
           printf("\n");
           
        while(nConto != -1){
                            
           
              printf("Inserire saldo inizio mese = ");
              scanf("%f", &saldoImese);
           
              printf("Inserire totale degli articoli in conto = ");
              scanf("%f", &artConto);
           
              printf("Inserire totale dei crediti = ");
              scanf("%f", &totCrediti);
           
              printf("Inserire limite di conto = ");
              scanf("%f", &creditLimit);
              
              newSaldo = saldoImese + artConto - totCrediti;
           
              printf("\n");
           
              if(newSaldo > creditLimit){
                 printf("NUMERO DI CONTO = %d\n", nConto);
                 printf("LIMITE DI CREDITO = %.2f\n", creditLimit);
                 printf("NUOVO SALDO = %.2f\n", newSaldo);
                 printf("******** IL SUO CREDITO HA RAGGIUNTO IL LIMITE ********\n");
                 printf("\n");
              }/* FINE if */
               printf("Inserire numero di conto = ");
               scanf("%d", &nConto);
           }/* FINE while */
           
           system ("pause");
           return 0;
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    È brutto riscrivere due volte le stesse identiche istruzioni...

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
    	float newSaldo = 1;
    	float creditLimit, saldoImese, totCrediti, artConto;
    	int nConto;
    
    	printf("\n");
    
    	do {
    		printf("Inserire numero di conto = ");
    		scanf("%d", &nConto);
    
    		printf("Inserire saldo inizio mese = ");
    		scanf("%f", &saldoImese);
    
    		printf("Inserire totale degli articoli in conto = ");
    		scanf("%f", &artConto);
    
    		printf("Inserire totale dei crediti = ");
    		scanf("%f", &totCrediti);
    
    		printf("Inserire limite di conto = ");
    		scanf("%f", &creditLimit);
    
    		newSaldo = saldoImese + artConto - totCrediti;
    
    		printf("\n");
    
    		if(newSaldo > creditLimit) {
    			printf("NUMERO DI CONTO = %d\n", nConto);
    			printf("LIMITE DI CREDITO = %.2f\n", creditLimit);
    			printf("NUOVO SALDO = %.2f\n", newSaldo);
    			printf("******** IL SUO CREDITO HA RAGGIUNTO IL LIMITE ********\n");
    			printf("\n");
    		}
    	} while (nConto != -1);
    
            system("PAUSE");
    	return 0;
    }
    Per inciso, se proprio vuoi usare system("PAUSE") devi includere l'header file stdlib.h
    every day above ground is a good one

  8. #8
    Originariamente inviato da YuYevon
    È brutto riscrivere due volte le stesse identiche istruzioni...
    con il do...while, il ciclo non si ferma lo stesso con nConto = -1, ma finisce di eseguire le istruzioni e poi termina....e questo non deve accadere...

    Per inciso, se proprio vuoi usare system("PAUSE") devi includere l'header file stdlib.h
    il Dev-C++ non lo impone...

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da Skass89
    con il do...while, il ciclo non si ferma lo stesso con nConto = -1, ma finisce di eseguire le istruzioni e poi termina....e questo non deve accadere...
    Giusto, non avevo visto le altre istruzioni e mi ero limitato a modificare il while. Direi allora che quello sia uno dei casi in cui si devono ripetere le stesse istruzioni... peccato :D

    Originariamente inviato da Skass89
    il Dev-C++ non lo impone...
    Il mingw del Dev non lo impone, tra l'altro se compili con -Wall ottieni il warning "implicit declaration", ma non con tutti i compilatori succede questo quindi ti conviene includere sempre tutti gli header file necessari :)
    every day above ground is a good one

  10. #10
    Originariamente inviato da YuYevon
    Il mingw del Dev non lo impone, tra l'altro se compili con -Wall ottieni il warning "implicit declaration", ma non con tutti i compilatori succede questo quindi ti conviene includere sempre tutti gli header file necessari
    sono a conoscenza anche di questa storia....ma sai com'è....sono un tipo mooooolto pigrooooo........ ......

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.