|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
[C++]Una sciocchezza sul ciclo for
Salve a tutti
mi trovo a scomodarvi per una sciocchezza, ma non trovo qualcosa che mi spieghi nel dettaglio come funziona il ciclo for e quindi lo chiedo a voi. for(<inizializzazione>;<condizione>;<avanzamento>) in pratica volevo sapere come fare questo; ipotizzando un ciclo for di questo tipo: Codice:
for (indice=0; indice<5 && <condizione>; indice++) { } come fare per lasciarlo = 3? spero di essere stato chiaro (cosa che spesso non mi riesce ![]() scusate per la banalità vi ringrazio ![]() PS: in pratica vorrei evitare di dover scrivere, per quello che mi serve, indice = indice - 1 fuori dal for ![]()
__________________
ho fatto affari con: na decina di anime ![]() Ultima modifica di swarm : 18-07-2006 alle 13:20. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
|
nella seconda sezione del for hai la cosiddetta 'condizione di permanenza' o meglio di ingresso: nel senso che se quella condizione non è verificata il ciclo si interrompe SENZA eseguire la terza sezione , nella quale potresti anche non mettere niente tra l'altro. quindi il tuo incremento non viene eseguito se la condizione non è vera e infatti gli indici incrementati vengono poi utilizzati per capire a che punto il ciclo si è interrotto. la condizione di permanenza deve essere letta come un valore booleano per il compilatore quindi deve essere scritta tra parentesi
for (;(varbool&&(pippo==5)&&(!file.leggicarattere==eof)) ![]() ; tanto per fare un esempio stupido ![]() nota che scritto così, col ; subito dopo senza alcuna istruzione, apparentemente il ciclo non fa nulla, in realtà ad ogni iterazione in cui controlla se file.leggicarattere non ha letto un carattere nullo, lo sta di fatto eseguendo e quindi avanza nel file. Ultima modifica di Black imp : 18-07-2006 alle 13:30. |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Prova: for (i=0; 0; i++) { } e vedrai che i alla fine vale 0, non 1.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
![]() |
![]() |
![]() |
#4 | |
Member
Iscritto dal: Oct 2004
Città: Bologna
Messaggi: 50
|
Quote:
Codice:
1. <inizializzazione> 2. se <condizione> 3. <istruzione> 4. <avanzamento> 5. goto 2 Codice:
for (i = 0; i < 5; i++) { // ... if (<condizione>) break; // ... } Decidi tu in base alla situazione se è meglio un index-- o un break.
__________________
And the salad is frightful! I have an important message to deliver to all the cute people all over the world. If you're out there and you're cute, maybe you're beautiful. I just want to tell you something: there's more of us ugly mother-fuckers than you are, hey-y, so watch out. |
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
![]() Semmai se leggicarattere è un metodo, si deve scrive allora: for (; varbool && pippo==5 && !(file.leggicarattere()==eof); ) ;
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
Quote:
nel mio caso, indice è un iteratore di un list<>, e quando esco dal for me lo trovo cmq avanzato..... ecco che faccio Codice:
list<classe>:: iterator it; bool bRet; bRet = false; for (it = getFile().begin(); it != getFile().end() && bRet == false; it++) { } quando subito dopo, vado a prendermi l'elemento trovato, mi ritrovo il successivo.....
__________________
ho fatto affari con: na decina di anime ![]() |
|
![]() |
![]() |
![]() |
#7 | |
Member
Iscritto dal: Oct 2004
Città: Bologna
Messaggi: 50
|
Quote:
Non è che se la variabile bRet diventa vera il for esce istantaneamente. Il corpo del for continua ad essere eseguito e con esso l'avanzamento (che viene fatto alla fine), poi alla successiva iterazione la guardia viene ricontrollata e risulta falsa: il for esce. Again: se vuoi che schizzi fuori dal ciclo, appena bRet diventa vera mettici un break.
__________________
And the salad is frightful! I have an important message to deliver to all the cute people all over the world. If you're out there and you're cute, maybe you're beautiful. I just want to tell you something: there's more of us ugly mother-fuckers than you are, hey-y, so watch out. |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
Quote:
alla fine mi resta decrementare quando esco, poichè i break, se non sbaglio (poi ricontrollo) mi sono "proibiti" dalle specifiche sul codice ![]()
__________________
ho fatto affari con: na decina di anime ![]() |
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
for (it = getFile().begin(); it != getFile().end() && bRet == false; bRet == false ? it++ : 1)
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Oct 2004
Città: Bologna
Messaggi: 50
|
và che finezza ti snocciola andbin.
__________________
And the salad is frightful! I have an important message to deliver to all the cute people all over the world. If you're out there and you're cute, maybe you're beautiful. I just want to tell you something: there's more of us ugly mother-fuckers than you are, hey-y, so watch out. |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
Quote:
ma la vuoi sapere l'ultima? mi è impedito l'uso dell'operatore condizionale ? (perchè "poco leggibile") ![]() e allora gli metto it--; alla fine del for e vaff..... alla faccia del bello stile ![]()
__________________
ho fatto affari con: na decina di anime ![]() |
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
![]() In questo momento non mi viene in mente altro.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
Quote:
grazie a te e agli altri byez
__________________
ho fatto affari con: na decina di anime ![]() |
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
|
Quote:
|
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
|
Quote:
no no dico in compilazione. adesso non dico proprio questo caso specifico però spesso quando bello baldanzoso tolgo le parentesi dopo gli if per es. mi cazzia subito: cioè scrivo magari if (pippo&& pluto==4) e non gli piace che il pluto==4 non sia tra parentesi - era questo che in realtà volevo dire, quando c'è una espressione di questo tipo -. forse il ciclo for non le richiede e le ho sempre messe per precauzione... proverò... ![]() |
|
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]() e magari ti é permesso il goto ![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
|
Quote:
fa conto che pippo sia boolean e pluto un int. sotto java sono sicurissimo che mi rompeva le balle ma java l'ho eliminato dalla mia vita. sotto c e c++ anche ma non ricordo se solo col gcc o anche col visual c++... ![]() ![]() |
|
![]() |
![]() |
![]() |
#20 |
Member
Iscritto dal: Apr 2004
Messaggi: 130
|
Ho letto in fretta e potrei non aver capito nulla, ma voglio comunque dire la mia...
![]() Codice:
for (it = getFile().begin(); it != getFile().end() && bRet == false; it += (bRet == false)) |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:10.