Newsgroup: it.comp.lang.c++
Titolo: doppio salto in un while...

Ho un problema molto stupido che nn saprei come risolvere,
...questa è una funzione che deve cancellare tutta una serie di protocolli
con lo stesso nome cliente che sono in memoria;
...il problema sta nell'ultimo else, quando entra li fa 2 passi aventi, uno
perchè è fuori dalla condizione e uno perchè è dentro.
praticamente se ci sono tre protocolli dello stesso cliente uno sotto
l'altro mi cancella il primo e il terzo! ...me ne salta uno perchè alla fine
della cancellazione del primo avanza di due; ...sarà l'ora ma nn riesco a
risolverlo... qualche aiuto?
int PROTOCOLLO::cancellacommessa(){
SCHEDA *temp = testa;
SCHEDA *temp1 = temp->prossimo;
char ncommessa[15];
char ncom[15];
cout<<"Inserisci commessa da cancellare:\t";
cin>>ncom;
while(temp != NULL){
if (strcmp(temp->ncommessa,ncom)==0){
temp = testa;
temp1 = temp->prossimo;
if ((temp==testa)&&(strcmp(temp->ncommessa,ncom)==0) ){
cout<<"pippo";
if (testa!=coda){
testa=temp->prossimo;
}
else {
coda=NULL;
testa=coda;
}}
else {
cout<<"pippa";
while(temp1!=NULL){
if (strcmp(temp1->ncommessa,ncom)==0){
cout<<"1";
temp->prossimo=temp1->prossimo;
}
if (temp->prossimo==NULL){
cout<<"2";
coda=temp;
temp1=NULL;
}
else {
cout<<"3";
temp=temp->prossimo;
temp1=temp->prossimo;
}}}}
temp=temp->prossimo;
}}

Visto che probabilmente è l'ora.. ed è perchè sei stanco. Che ne dici 
risolvertelo da solo domani quando sei riposato invece di far 
domande qui?
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 risolverlo... qualche aiuto?
Secondo me piu' che l'ora e' l'indentazione che ti confonde
Il codice, comunque, mi pare molto... incasinato...
Ma chi e' il vostro prof???
(e comunque di C++ qui vedo solo il cout :-)))
Ho fatto un po' di commenti (nessuna modifica):
int PROTOCOLLO::cancellacommessa()
{
    SCHEDA *temp = testa;
    SCHEDA *temp1 = temp->prossimo;
    char ncommessa[15];
    char ncom[15];
    cout<<"Inserisci commessa da cancellare:\t";
    cin>>ncom;
    while(temp != NULL)
    {
        if (strcmp(temp->ncommessa,ncom)==0) // se l'ho beccato
        {
            temp = testa; // ma scusa... l'ho appena beccato in "temp" e
                        // subito sostituisco il temp con testa???
                        // sei sicuro?
            temp1 = temp->prossimo;  // temp1 = testa->prossimo
            if ((temp==testa)&&(strcmp(temp->ncommessa,ncom)==0) )
        // temp == testa è sempre vera perchè ho appena fatto temp=testa
        // lo strcmp è "strano" se lo leggi per quello che è:
        // strcmp(testa->ncommessa,ncom)
        // cosa volevi verificare con questo if?
            {
                cout<<"pippo";
                if (testa!=coda) // se non sono in fondo alla lista
                {
                    testa=temp->prossimo;
                    // da leggere testa=testa->prossimo
                }
                else
                {
                    coda=NULL; // metto cosa a NULL
                    testa=coda; // metto testa a NULL
                }
            }
            else
            // altrimenti cosa? continua a non essermi chiaro l' if...
            {
                cout<<"pippa";
                while(temp1!=NULL) // while temp->prossimo != NULL
                {
                    // se è il prossimo
                    if (strcmp(temp1->ncommessa,ncom)==0)
                    {
                        cout<<"1";
                        temp->prossimo=temp1->prossimo;
        // leggi: temp->prossimo=temp->prossimo->prossimo
        // la prossima volta che scorro la lista mi salta l'elemento
        // temp->prossimo
        // l'ho perso definitivamente???
                    }
                    if (temp->prossimo==NULL) // se sono all'ultimo elemento
                    {
                        cout<<"2";
                        coda=temp; // assegno a coda l'ultimo elemento
                        temp1=NULL;
                    }
                    else // se non sono all'ulimo elemento
                    {
                        cout<<"3";
                        // mi sposto avanti di uno
                        temp=temp->prossimo;
                        temp1=temp->prossimo;
                        // scrittura poco leggibile, secondo me
                    }
                }
            }
        }
        temp=temp->prossimo; // mi sposto avanti di uno
    }
}
Prova a vedere se così ti è piu' chiaro cosa succede...
--
Gerolamo