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

    [C] Chiarimento condizione di un while

    Salve, ho iniziato a leggere la guida per il linguaggio C presente sul sito, nella lezione 20 vengono spiegati i controlli iterativi, tutto chiaro, ho però problema a capire la condizione di un while in un esempio:

    codice:
    #include <stdio.h>
    
    int main()
    {
    int valore;
     
    while (scanf("%d", &valore) == 1 && valore != 0)
    {
       if (valore < 0)
       {
          printf("Valore non consentiton");
          break;
          /* esce dal ciclo */
       }
     
       if (valore > 100)
       {
          printf("Valore non consentiton");
          continue;
       }
     
       int quadrato = valore * valore;
       printf("%d n", quadrato);
    }
    }
    Il programma funziona come descritto nella guida, quindi se si inizializza la variabile "valore" a 0 si esce dal programma, non capisco però perché nelle condizioni del while ci sia == 1 && valore != 0 e non solamente != 0 e provando a mettere solamente != 0 quando inserisco 0 non esce dal ciclo. (esce con il punto "."). Grazie in anticipo.

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Nella condizione del while , puoi mettere soltanto valore!=0,
    ma valore non dovrà essere inizializzata a 0
    e dovrai inserire la scanf() all'interno del ciclo .


    la condizione come è ora significa , acquisisci valore tramite scanf() se scanf ha successo ==1
    e valore diverso da 0 , esegui le istruzioni del while
    Tecnologia

  3. #3
    Ti ringrazio, non avevo intuito che == 1 fosse per il successo di scanf. Mettendo lo scanf all'interno avevo risolto ma volevo comprendere la condizione del while grazie

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Una precisione: la regola non è "scanf() restituisce 1 se ha successo"

    Come si legge nella documentazione http://www.cplusplus.com/reference/cstdio/scanf/ :

    On success, the function returns the number of items of the argument list successfully filled. This count can match the expected number of items or be less (even zero) due to a matching failure, a reading error, or the reach of the end-of-file.

    Nel tuo caso è 1 ma non necessariamente lo è anche in altri casi
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Grazie della precisazione, mi sa che eviterò di inserire scanf nelle condizioni XD

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.