Ciao e Benvenuto. In questa conferenza, mi piacerebbe parlare del while e dei cicli while.
Abbiamo parlato del ciclo for, che essenzialmente consente di ripetere il codice.
Ci sono altri costrutti in c chiamati while e do while che fanno la stessa
cosa con una sintassi diversa.
Quindi il ciclo while il ciclo while è un meccanismo per ripetere
un insieme di istruzioni e consente l'esecuzione per tutto il tempo in cui un'espressione logica specificata restituisce true.
Quindi più o meno lo stesso qui. Proprio come le istruzioni if eseguiranno un certo codice,
mentre le istruzioni eseguiranno un certo codice in base a una valutazione booleana un certo numero di volte.
Tutto ciò che puoi fare nel ciclo for, puoi farlo nel ciclo
while, è solo una sintassi diversa.
Quindi l'aspetto del ciclo while è qualcosa del genere.
Ad un livello molto alto, se stiamo guardando uno pseudocodice,
mentre questa condizione è vera, continua a farlo.
Quindi, per metterlo in relazione con un esempio più mondiale del mondo.
Fondamentalmente, finché hai fame, mangia panini, qualcosa del genere.
Quindi ripeti il codice. Continuerai a mangiare molti panini finché hai fame.
La sintassi generale per il ciclo while è la seguente.
E questo ti mostra la sintassi per un'istruzione
nel corpo, quindi non è necessario fornire parentesi graffe o parentesi graffe.
Tendo a usare i termini parentesi graffe
e parentesi nella stessa terminologia.
Quindi ecco come appare la sintassi quando hai una dichiarazione rispetto a più istruzioni.
Affermazioni multiple, devi avere quelle parentesi, una sola
affermazione non lo fai, sono opzionali. Non puoi averli o non devi averli.
L'espressione va tra parentesi proprio come il ciclo
for e l'istruzione if. L'espressione qui è diversa dal
ciclo for in quanto è una singola condizione di uscita.
È solo l'espressione. Non si inizializza la variabile di controllo del ciclo.
Non si modifica la variabile di controllo del ciclo tra parentesi.
È solo l'espressione, solo la condizione di uscita.
La condizione per la continuazione del ciclo while viene testata all'inizio.
Quindi questo è il top del ciclo.
Quindi questo significa che è un ciclo pretest. E ciò significa che potrebbe
essere eseguito 0 volte o potrebbe essere eseguito più volte nel corpo.
E ancora, questo sarà rilevante perché il ciclo do while sta facendo qualcosa di leggermente diverso.
Se l'espressione inizia falsa, nessuna delle istruzioni del
ciclo nel corpo verrà eseguita.
Ecco perché è al massimo della prova.
Quindi se rispondi alla prima domanda no, non ho
fame, allora non mangerai mai alcun panino. Stai per passare direttamente al caffè o
alla riga di codice successiva. Non entrerai nel corpo del ciclo.
Se la condizione del ciclo inizia come
vera, il corpo del ciclo deve contenere un meccanismo per
cambiarlo se il ciclo deve finire. Altrimenti, avrai un ciclo infinito.
Quindi con il ciclo for in cui modifichi la variabile di controllo del ciclo in una singola istruzione, è
la stessa cosa nel ciclo while tranne che devi farlo nel corpo.
Il ciclo while inizializzerà da
qualche parte la variabile di controllo del ciclo,
quindi modificherà all'interno del corpo del codice.
Quindi, come ho detto, il ciclo while può fare tutto ciò che fa un ciclo for, è solo una sintassi diversa.
E ancora, il ciclo for è più è più breve. Puoi fare tutto in una
riga mentre il ciclo while devi fare queste 3 cose su righe separate.
Quindi, in questo
esempio, abbiamo int count uguale a 0. Questa è la variabile di controllo del loop. Questo è al di fuori dell'istruzione del ciclo while.
Se stavi usando un'istruzione for, questa andrebbe all'interno del ciclo for come prima del primo punto e virgola.
Ecco dove inizializzare la variabile di controllo del ciclo.
Quindi hai la parola chiave while e tra parentesi hai l'espressione booleana.
Questo sarebbe equivalente al ciclo for, la seconda istruzione subito
prima del secondo punto e virgola.
Quindi questo è ciò che controlli per vero o falso. E se è vero o falso, entri nel corpo del ciclo.
Se count è minore di 5, stamperai il conteggio.
La riga di codice successiva è molto importante, il
plus plus conta perché sta modificando la variabile di controllo del ciclo.
Devi fare questo più più conteggio o non uscirai mai dal ciclo perché la condizione in
alto dice se il conteggio è inferiore a 5. Se il conteggio è sempre uguale a 1, hai
un ciclo infinito.
Quindi quel plus plus conta molto, molto importante.
Plus plus count Remember è un operatore di incremento.
Sta solo dicendo che il conteggio è uguale a contare più 1.
Questo ciclo verrà eseguito 5 volte.
Verrà eseguito con conteggio uguale a 1, conteggio
uguale a 2, conteggio uguale a 3, conteggio uguale a 4 e conteggio uguale a 5.
Una volta che count è uguale a 6, salterà fuori dal ciclo e
non uscirà più da nessuna istruzione nel corpo.
Di nuovo, dovresti pensare in termini di ciclo for.
È solo la variabile di controllo del ciclo e la modifica della variabile
di controllo del ciclo non è nella dichiarazione del ciclo effettivo.
Non è tutto in una riga come nel ciclo for.
Ecco un altro esempio in cui la logica è controllata per terminare il ciclo.
Quindi in quel primo esempio qui che ho mostrato, questo è un ciclo di controllo del contatore.
Verrà eseguito sempre lo stesso numero di volte che è 5.
Nel prossimo esempio, questo è un esempio in cui il ciclo può essere
eseguito 100 volte o 0 volte.
La condizione che stiamo valutando qui nella nostra chiave while dove num non è uguale
a 1 negativo dipende tutto da ciò che l'utente inserisce perché
num è ciò che l'utente inserisce.
Quindi questo ciclo può essere eseguito 0 volte, può essere eseguito 100 volte.
Tutto dipende dall'input dalla tastiera.
E questo è chiamato un ciclo di controllo sentinella. Non è controcontrollato.
Si basa su logica e variabile che possono cambiare.
Quindi, mentre num non è uguale a 1 negativo e quindi num
viene memorizzato il valore che inseriamo nella tastiera.
Se l'utente non inserisce mai un 1 negativo sulla tastiera, questo ciclo non uscirà mai.
Quindi lo stesso tipo di sintassi qui con il nostro tempo.
La nostra variabile di controllo del ciclo qui è num. Inizializziamo lo 0 in alto,
quindi lo leggiamo modificandolo per vedere se stiamo per entrare nel ciclo in base a
quello che l'utente ha inserito nella tastiera.
Quindi, all'interno della parentesi per la parola chiave while, la controlliamo
effettivamente per vedere se è un 1 negativo.
E poi nel corpo del ciclo while con le parentesi, le
parentesi non devono essere lì perché c'è una singola istruzione, ma mi piace inserirle lì.
Quindi leggiamo anche l'input successivo e abbiamo memorizzato in num.
Se l'utente inserisce un 1 negativo per quell'ingresso successivo, salterà fuori dal loop.
In caso contrario, continuerà a essere eseguito e chiederà loro di inserire le informazioni.
Un ciclo do while è leggermente diverso dal
ciclo for nel ciclo while perché è considerato un ciclo post-test.
Quindi nel ciclo while il corpo viene eseguito mentre la condizione è vera.
Nel ciclo do while in cui il corpo viene eseguito per la prima volta incondizionatamente,
il ciclo do while perché il test è in
fondo significa che eseguirai sempre il ciclo almeno una volta.
Eseguirai sempre il corpo almeno una volta,
potrebbe essere di più, ma è sempre uno, non è mai 0.
Perché la condizione per testare l'uscita è in fondo.
Questo è chiamato ciclo post-test. Viene anche chiamato loop controllato dall'uscita.
Quindi useresti il ciclo do a while se vuoi che il ciclo
entri almeno una volta.
In genere, non è necessario utilizzare un ciclo do while
perché puoi ancora fare la stessa cosa in un ciclo for, se lo desideri,
devi semplicemente inserire il codice fuori dal ciclo.
Quindi il ciclo do while non è realmente necessario, ma in alcuni casi potresti volerlo utilizzare.
Dopo l'esecuzione iniziale, il corpo viene
eseguito solo mentre la condizione è vera. Quindi, dopo la prima iterazione del
ciclo, agirà come normali cicli. Salterà fuori se la condizione è falsa.
Quindi ecco come appare. Il do è in alto e
poi il test per la condizione è in fondo con la parola chiave while.
Quindi fai una nuova
parola chiave e quindi avrai parentesi o non parentesi a seconda che
tu abbia o meno più affermazioni nel corpo.
Se hai solo una singola affermazione nel corpo, non avrai una parentesi. Dovrai solo fare in alto e
poi avrai il mentre in fondo al ciclo.
E nel frattempo, tra parentesi, avrai la valutazione booleana che sarà la
condizione che controlli. Ma ancora una volta,
poiché quella condizione è in fondo, hai sempre la garanzia di eseguire l'istruzione almeno una volta.
E quindi l'esempio a sinistra è una dichiarazione, l'esempio a
destra è più dichiarazioni. Quindi hai le parentesi, le parentesi graffe.
E ancora, in questo secondo esempio, stai dicendo che potresti avere qualcosa come prompt per la password, leggere
l'input dell'utente e mentre l'input non è uguale alla password.
Ma chiederai sempre quella password almeno una volta.
Quindi un altro esempio di ciclo while.
Il primo esempio in alto qui è un esempio di
come il ciclo può
essere eseguito una o più volte, ma mai 0.
Tutto dipende da ciò che l'utente inserisce. Verrà sempre eseguito almeno una volta, ma si
tratta di leggere l'input dalla tastiera. Vediamo la funzione scanf.
E finché l'utente non inserisce 20,
eseguirà questo ciclo.
Un ciclo while può anche essere un ciclo di controllo del contatore, il che significa che verrà eseguito un certo numero di volte.
In questo caso, verrà eseguito 4 volte in questo esempio.
Abbiamo int numero uguale a 4. E poi abbiamo fare in alto,
e poi
abbiamo le parentesi perché abbiamo più affermazioni all'interno del corpo.
E stiamo incrementando quella variabile di controllo del ciclo all'interno del corpo, numero più più.
E poi la condizione per il controllo è ancora in fondo. Quindi lo eseguirai 4 volte.
E noterai che la parola chiave while non deve essere sulla stessa riga della parentesi graffa destra.
In genere, lo è, ma non deve esserlo.
E anche la parola chiave while in basso termina con un punto e virgola, dovresti notarlo anche tu.
Quindi abbiamo imparato tutto su questi loop; il ciclo for, the while e do while.
Quali loop dovresti usare?
Bene, la prima cosa che devi decidere su quale loop vuoi usare è prima
vuoi che sia pre-test o post-test? Vuoi che venga eseguito almeno una volta o non
vuoi che venga eseguito almeno una volta? Se vuoi che venga eseguito
almeno una volta, utilizzerai il comando do while. Se questa non è una
condizione, puoi usare il for o the while o il do while.
Quindi per la maggior parte quando decidi quale loop usare,
sarà sempre un loop pre-test. Dovresti stare lontano dal ciclo do while.
È solo un'opzione migliore nella maggior parte dei casi. È molto più facile da leggere.
È molto meglio guardare prima di eseguire effettivamente il ciclo.
Basta non iniziare il loop, è meglio controllare quella condizione in alto.
Per motivi di leggibilità, se il ciclo è alla prova, è molto più intuitivo.
Quindi controlla il ciclo all'inizio, usa un per o un po '.
E in molti casi, è importante che il ciclo venga saltato completamente se il test non viene inizialmente soddisfatto.
Ancora una volta, poiché è così, il test dovrebbe essere al top. Non dovresti sempre eseguire almeno una volta.
Per la maggior parte potresti sempre non voler eseguire.
Quindi dovresti usare a per un po '.
Ora la domanda si riduce a bene quale dovrei usare, per un po '.
È davvero una questione di preferenze personali. Non importa perché, come ho detto
all'inizio di questa conferenza, tutto ciò che puoi fare in un attimo, lo puoi fare in un per.
Quindi, se ti piace di più il ciclo for, a volte for è un po
'più veloce perché tutte le modifiche al controllo del loop e l'inizializzazione e la condizione
di uscita possono essere tutte in una riga.
Ma dipende davvero da te.
In genere, quello che faccio è utilizzare il ciclo for per i loop controllati da contro.
Ma ancora una volta, puoi usare lo stesso. Se in realtà vuoi usare un
ciclo for e farlo sembrare un po ', semplicemente
non hai la prima e la terza
espressione, hai solo quella singola. Quindi il punto e virgola per i test il punto e virgola è lo stesso di while test.
Quindi questo ti sta solo mostrando che il for in the while può fare la stessa cosa, basta
cambiare un po 'la sintassi.
Se si desidera effettivamente utilizzare un ciclo while ma si desidera che agisca
come un ciclo for, è necessario anteporre l'inizializzazione e includere le istruzioni di aggiornamento nel corpo.
Quindi quello che faresti è qualcosa del genere e di solito lo fai sempre per un ciclo di tempo.
Ma questo è l'equivalente di un ciclo for. L'inizializzazione è al di fuori del ciclo
della variabile di controllo, la variabile di controllo del ciclo.
La condizione del test è all'interno delle parentesi,
quindi stai aggiornando quella variabile di controllo del ciclo nel corpo del ciclo while.
E questo è lo stesso dell'aggiornamento del test di inizializzazione del ciclo for e
quindi del corpo. Non c'è alcuna differenza.
Ancora una volta, come ho detto, uso un po 'di più il ciclo for forse per i loop di controllo del contatore.
Ma userò sia il per che il mentre in modo intercambiabile, a seconda di come mi sento quel giorno.
Quindi un ciclo for potrebbe essere un po 'più appropriato se si
desidera inizializzare e aggiornare una variabile in una riga.
Un ciclo while è migliore quando le condizioni sono diverse.
Ancora una volta, il controllo del contatore esegue il ciclo per, il ciclo della sentinella forse il ciclo while.
Ed ecco un esempio di un ciclo while con un ciclo di controllo sentinella
e un ciclo for che fa di nuovo la stessa cosa o un ciclo for per un contatore controllato.
Sebbene il ciclo possa essere eseguito molte volte in
base a ciò che l'utente immette, il ciclo for è controllato da un contatore.
Quindi questo è il momento del fare mentre. Si spera che questo sia chiaro.
Acquisire familiarità con questi loop perché spesso si desidera ripetere il codice.
Nel discorso un po 'sui cicli annidati e anche un po'
diversi meccanismi per uscire da un ciclo usando un'interruzione
o continuare. Grazie.