Newsgroup: it.comp.lang.c++
Titolo: AAAAAAAAAAAAAAAAAAA

Ragazzi aiuto,
perchč se metto sto pezzo di codice nel mio listato il programma mi rimane
in stallo? (scusate l'ignoranza)
for (int i = 0; i < MaxNum; i++) {
 if (numeri[i] == 'q') {
  i = MaxNum;
  }
 cin >> numeri[i];
}
Grazie mille
ENZO
E-Mail: 
enzo...@inwind.it


Rimane in stallo in che senso?
Ricorda che quando fai cin >> numeri[i];
devi inserire il numero dalla tastiera.
Finche non premi [INVIO] la lettura non termina.
Manlio Perillo

 }
Prova a svuotare l'input dopo la lettura:
while ( cin.get() != '\n' );
EMG

 }
Se ho capito bene, tu vuoi che quando l'utente batte "q" si esca dal ciclo,
giusto ?
Peccato che se per leggere usi cin >> (int), una lettera non la leggerai mai
:-)
Dovresti leggere sempre un char con cin, e poi se č un numero convertirlo e
memorizzarlo nel vettore.
Oppure usare un valore (numerico!) per segnalare l'uscita dal programma,
tipo -1, cosě cin >> (int) lo leggerebbe.
Nota a margine: per uscire dal ciclo non serve mettere al massimo il
contatore "a mano", basta una semplice istruzione break; :-)
Massimo

}
Comunque, mi sembra che non sia un metodo saggio quello di utilizzare
l'assegnazione ad i per uscire dal ciclo.
In generale, non e' bene modificare una variabile contatore di un
ciclo, all'interno del ciclo.
Io avrei usato (non volendo usare salti) :
bool UscitaForzata = false ; 
for ( int i = 0 ; (i < MaxNum) && (!UscitaForzata) ; i++ )
{
    if ( numeri[i] == 'q' ) 
    {
       UscitaForzata = true ;
    }
    else
      cin >> numeri[i] ;
}
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
-----------------------------------------------------
"There is nothing better for understanding a kangaroo
 than seeing it jump." [D.Grune, C.J.H. Jacobs]
-----------------------------------------------------

 -----------------------------------------------------
"There is nothing worse for understanding code
than seeing it jump." [C.A.R. Hoare, E.W. Dijkstra]

than seeing it jump." [C.A.R. Hoare, E.W. Dijkstra]
Ah Ah bella questa !...
--
Andrea Laforgia (
andrea_...@bigfoot.com
)


Se fai questa cosa per uscire dal ciclo, basta usare break;
Ma in questo caso break non uscirebbe solo dall'if ma non dal for?

Ma in questo caso break non uscirebbe solo dall'if ma non dal for
No, l'istruzione break esce dai cicli for e while, non c'entra niente con il
costrutto if.
Domenico Barra

Considero pero' accettabile anche:
Non é l'unico. Anch'io la uso perché rende il codice molto leggibile.
Il Ghenio
-----------
LOVELY SARA
Dal lunedi'al venerdi'su Italia Uno alle 8:10
Non perdetevelo...
-----------

}
E ci credo io, il codice contiene un errore madornale. Hai provato a
fare il debug? Tu fai "cin>>numeri[i]" , poi incrementi il contatore e
quindi la condizione "if(numeri=='q') i=MaxNum" non si verifica mai.
Casomai dovresti fare:
char *tasto;
for (int i = 0; i < MaxNum; i++)
    {
    cin >>tasto;   
    if (strcmp(tasto,"q")==0)i=MaxNum;else numeri[i]=atoi(tasto);
    }
inoltre é un cattivo esempio di programmazione modificare la variabile
contatore all'interno di un ciclo. Molto meglio una cosa del tipo:
bool fineciclo=false;
char *tasto;
for (int i = 0; i < MaxNum && (!fineciclo) i++)
    {
    cin>>tasto;
    if(strcmp(tasto,"q")==0)fineciclo=true;else numeri[i]=atoi(tasto);
    }
Non ho provato questi due listatini ma penso che funzionino.


 quindi la condizione "if(numeri=='q') i=MaxNum" non si verifica mai.
Mai, mai... considerato che un byte puo' assumere 256 valori, anche se
solo uno di questi vale 'q', poiche' un PC odierno ha svariati megabyte
di memoria, sei praticamente sicuro che il ciclo finisca. Certo,
difficilmente subito dopo aver premuto il tasto 'q'...
Ciao,
Nicola


mi hai risparmiato qualche ora di futuro debugging (probabilmente);
reminiscenze dell' Exit del pascal...