Se guardi la sintassi essa ti parlerà.
while(un argomento solo)
for(minimo un argomento, ma essi possono crescere posso anche inizializzarci le variabili qua dentro!).
Es: for(;i == 4; ) --> è esattamente un while ma riscritto in forma for, ma viceversa non posso, il while non posso farlo stile for, rimanendo nelle tonde.
Altro es for: for(int a = 0,b = 0,c = 0, d = 0, e = 0;i == 4; i++); Qui mi sto letteralmente divertendo a inizializzare variabili interne come parametro senza farlo nel corpo senza un mero motivo posso farlo e perchè non farlo?
Nel while non sappiamo sempre il numero di iterazioni che verranno eseguite, nel for invece a prescindere sappiamo sempre quando essa finirà, e se non le sappiamo è semplicemente un while riscritto in un altra maniera, la definizione poi continua con quella di
@Mursey e finisce qui.
Un esempio di for: trovare i primi 100 numeri primi.
Codice:
for(i = 0; i < 100 - 1; i++){
bla bla bla...
}
Una volta che la variabile interna "i" avrà valore 100 essa farà terminare il ciclo.
Un esempio di while: trovare tutti i numeri primi fino a quando essi sommati non faranno una tot somma da noi settata.
Codice:
#include <stdio.h>
int main(){
int i = 0;
while(i == 4){
i++;
}
printf("fatto");
return 0;
}
questo ciclo può durare anche un eternità a noi non interessa, il nostro interessa è che la variabile i sia uguale a 4 finchè essa non soddisfa questo requisito siamo disposti ad attendere l'infinito ed oltre mentre con un ciclo for avremmo potuto imporre un limite di iterazioni che possiamo fare anche con un while naturalmente ma non settarli come parametri nelle tonde. Detto ciò anche con un while si potrebbe emulare un for e con un for viceversa, quindi perchè non farlo perchè semplicemente il codice è orribile da vedere e crerebbe confusione nel programmatore terzo che legge il tuo codice. Un problema molto importante che affligge principianti ed esperti è che spesso si cade in trappola nei loop continui tipo questo:
while(i = 0)
Voglio aprire poi una parentesi su quest'altro argomento: una volta che tu mi compili, quando vado a debuggarlo e leggo il codice assembly mi apparirà JNE o JE, il che sta per if equal or not equal, dunque la macchina opera solo con la condizione IF, che noi chiamiamo if in programmazione sempre per pure motivo di comprensione dato che ci aiuta logicamente ad associarla alla nostra lingua ma per la macchina 0 e 1 rimane, fare un parsing e rinominarla "cacca" non ci vuole niente. Anche gli stessi loop la macchina li farà con la condizione JE o JNE, la macchina non conosce il while o il for è una cosa fatta per facilitare la programmazione a noi umani, la macchina qualunque cosa tu scriva applicherà la sintassi da me scritta, anche se essa è 0-1 lo stesso assembly usa idiomi della nostra lingua. Dunque la domanda è vale la pena di rispettare il for o il while visto che posso usarli nello stesso modo? si ma no, rispetta sempre la convenzione del tuo linguaggio a meno che tu non ottimizzi meglio di un compilatore.
mi sono dilungato troppo ma penso che abbia risposto completamente alla tua risposta