PDA

Visualizza la versione completa : [C] Chiarimento condizione di un while


Onizuka8
07-07-2013, 03:31
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:



#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.

torn24
07-07-2013, 10:44
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

Onizuka8
07-07-2013, 12:10
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 :D

Alex'87
07-07-2013, 14:41
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 ;)

Onizuka8
07-07-2013, 15:02
Grazie della precisazione, mi sa che eviterò di inserire scanf nelle condizioni XD

Loading