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

    [C] scanf e ciclo do.while -> Non si aggiorna scanf!

    Ciao a tutti.
    Il ciclo incriminato è il do-while
    codice:
    void add_price(float * prezzi){
        float prezzo = 0.0;
        unsigned i = 0;
        int a;
      
    
       do{
       printf("Inserisci il numero dell'elemento a cui vuoi mettere il prezzo ed il prezzo:\n");
       printf("\n");
       scanf("%u%*c%f",&i,&prezzo);
       } while (!i && !prezzo);
    Non funziona, va all'infito. Praticamente io mi aspetto (e sbaglio) che scanf, ad ogni iterazione chieda l'input.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Che vuol dire "non si aggiorna scanf" ? Che dati inserisci ?

    E poi non ha senso usare il ! per il prezzo (dato che non è un valore intero). Semmai

    while (!i || prezzo<=0.0);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Il primo errore è sicuramente all'interno dello scanf... infatti alla varibile prezzo, non devi mettere '&' perchè è già passata per riferimento....
    però non ho capiuto una cosa, quante volte si deve ripetere ciò che c'è nel do??

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da seby.91
    Il primo errore è sicuramente all'interno dello scanf... infatti alla varibile prezzo, non devi mettere '&' perchè è già passata per riferimento....
    Guarda che prezzo e' una variabile locale, quindi va bene il '&'

    prezzi è un puntatore apparentemente non usato
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Sulla &: devo usarla perchè passo l'indirizzo della var locale, come dice oregon
    prezzi lo userò una volta che sono soddisfatto dell'input. (faccio fare i controlli al programma e poi lo inserisco)

    Il fatto è che l'input ideale è:
    4 15.22
    E se l'utente inserisce solo una delle due? il ciclo do-while dovrebbe dirgli di reinserire i dati.

    All'inizio avevo pensato a:
    codice:
       do{
       printf("Inserisci il numero dell'elemento a cui vuoi mettere il prezzo ed il prezzo:\n");
       printf("\n");
    
       } while (   scanf("%u%*c%f",&i,&prezzo) != 2);
    perchè scanf ritorna teoricamente il numero di parametri letti.
    Invece, una volta inserito l'input sbagliato, il programma esegui infinite volte il corpo del ciclo, senza richiedere all'utente di dargli in input. (Scanf, non dovrebbe entrare in azione ad ogni fine iterazione?).

    Sono un po' confuso.

  6. #6
    Originariamente inviato da oregon
    Guarda che prezzo e' una variabile locale, quindi va bene il '&'

    prezzi è un puntatore apparentemente non usato
    scusami hai ragione... avevo confuso prezzo con prezzi..

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Adesso hai cambiato le condizioni del while ... così non ci capiamo ...

    Stiamo parlando della prima versione del while (per cui ti ho dato il codice funzionante) o di un'altra ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    131
    Originariamente inviato da vincenzo2342
    E se l'utente inserisce solo una delle due? il ciclo do-while dovrebbe dirgli di reinserire i dati.
    comunque se a scanf gli passi "%u%*c%f" lui aspetterà ignorando gli a capo e spazi fino a che non ottiene i due valori.. quindi se l'utente digita soltanto un valore scanf non ritorna..

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    17
    do{
    printf("Inserisci il numero dell'elemento a cui vuoi mettere il prezzo ed il prezzo:\n");
    printf("\n");

    } while ( scanf("%u%*c%f",&i,&prezzo) != 2);

    se ho capito...

    do{
    i=0;
    prezzo = 0.0;
    printf("Inserisci il numero dell'elemento a cui vuoi mettere il prezzo ed il suo prezzo:\n");
    //formato 1 13.5
    scanf("%u %f\n", &i,&prezzo);
    }while(i!=0 || prezzo!=0.0);

    anche se teoricamente scanf()!=2 dovrebbe andare bene...

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Come ti avevo scritto

    Originariamente inviato da n00b_new
    }while(i!=0 || prezzo<=0.0);
    dato che ci si aspetta un prezzo positivo.

    anche se teoricamente scanf()!=2 dovrebbe andare bene...
    No, a meno che tu non voglia accettare valori come

    0 0
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.