PDA

Visualizza la versione completa : [C] Ciclo con esclusione break


woss
18-01-2006, 20:46
ciao a tutti, per prima cosa spiego la situazione:
ho due array chiamati
char array1[52]="....";
char array2[52]="....";

o poi dichiarato:
un indice int i che uso per scorrere l'array
una variabile c che uso per appoggiare un carattere letto da un file di testo
una variabile trovatoche diciamo mi funziona come una flag o un boolean.

voglio far si che il carattere letto dal file di testo venga confrontato con i valori inizializzati nell'array1 e se il carattere viene individuato deve stampare il carattere della stessa posizione dell'array2

quello che ho pensato io è:

premetto che file_chiaro e la variabile per il file di testo in lettura

dopo aver aperto il file....

while (!feof(file_chiaro))
{
fscanf(file_chiaro,"%c",&c);
trovato=0;
for (i=0;(i<52);i++)
{
if (c == array1[i])
{
trovato=1;
break;
}
}

if (trovato)
{
printf("%c",array2[i]);
}
else
{
printf("%c",c);
}
}
.... e chiudo il file.

così funziona, il problema e che mi è vietato usare il break in quella posizione e senza break, che forza l'uscita, il programma non fa quello che deve fare... ho provato farlo in altre maniere ma niente
qualcuno mi può aiutare?

oregon
18-01-2006, 21:25
Che vuol dire "ti è vietato il break"?

woss
18-01-2006, 21:31
che non lo posso utilizzare...
è solo una condizione che mi è stata imposta diciamo...
cioè non lo posso utilizzare per forzare l'uscita dall'if ma lo posso utilizzare esclusivamente in un ciclio switch!

anx721
18-01-2006, 23:09
while (!feof(file_chiaro) and !trovato)

trovato va inizializzato a 0 prima del while.

woss
19-01-2006, 01:58
così non funzia...

non stampa niente!!!

devo in pratica trovare un modo che mi permette, dopo aver acquisito il carattere e assegnato alla variabile c, c lo confronto con ogni occorrenza dell'array1 e se c è uguale all'occorrenza i dell'array1 devo stampare l'occorrenza i dell'array 2, se c non è uguale a nessuna occorrenza dell'array 1 devo stampare il carattere letto.

Samuele_70
19-01-2006, 10:18
Originariamente inviato da woss
...
così funziona, il problema e che mi è vietato usare il break in quella posizione e senza break, che forza l'uscita, il programma non fa quello che deve fare... ho provato farlo in altre maniere ma niente
qualcuno mi può aiutare?
Se ho capito bene... :confused:
Per determinare l'uscita dal for(), quando si verifica la
condizione (c == array1[i]) è sufficiente settare
la variabile i ad un valore superiore a 52.

Esempio:



while ( !feof( file_chiaro ) )
{
fscanf( file_chiaro, "%c", &c );
for (i=0; i<52; i++)
{
if (c == array1[i])
{
printf("%c", array2[i]);
i=60;
}
}
if(i < 60) printf("%c", c);
}

dannie
19-01-2006, 10:25
Nel tuo codice, così come l'hai postato, modifica il ciclo così:

trovato=0;
for (i=0;(i<52)&&!trovato;i++)
{
if (c == array1[i])
{
trovato=1;
i--;
}
}
Però in questo modo si ferma alla prima occorrenza del carattere c in array1. Se vuoi che le trovi tutte fai prima a modificare in questo modo:

while (!feof(file_chiaro))
{
fscanf(file_chiaro,"%c",&c); //leggo un carattere

trovato=0; //a priori penso di non trovarlo
for (i=0;(i<52);i++) //scorro tutto il vettore
{
if (c == array1[i]) //se lo trovo
{
trovato=1; //mi segno di averlo trovato almeno una volta
printf("%c",array2[i]); //e stampo l'equivalente di array2
}
}

if (!trovato) //dopo aver controllato tutto array1,se non ho mai trovato c
printf("%c",c);
}
:ciauz:
PS corso universitario di C base eh?? Anche a me vietavano i break se non negli switch... :D

dannie
19-01-2006, 10:27
Originariamente inviato da Samuele_70
Se ho capito bene... :confused:
Per determinare l'uscita dal for(), quando si verifica la
condizione (c == array1[i]) è sufficiente settare
la variabile i ad un valore superiore a 52.

Esempio:



while ( !feof( file_chiaro ) )
{
fscanf( file_chiaro, "%c", &c );
for (i=0; i<52; i++)
{
if (c == array1[i])
{
printf("%c", array2[i]);
i=60;
}
}
if(i < 60) printf("%c", c);
}

Mi ha bruciato sul tempo! :D

woss
19-01-2006, 12:33
grazie ragazzi...funziona perfettamente

proprio così corso universitario di c base e le istruzione break (fuori da switch), exit, continue e goto sono vietate...vabhè goto non lo usavo comunque.

ciao ciao

woss
19-01-2006, 15:02
un ultima cosa..
spero non vada troppo OT cmq:

while (!feof(file_chiaro))
{
...
...
}

così dovrebbe svolgere le istruzioni fino a che non viene raggiunta la fine del file.

solo ora mi sono accorto che stampa un carattere in più.

es:
se nel file_chiaro c'è scritto ciao
e
se alla c corrisponde i
se alla i corrisponde t
se alla a corrisponde r
se alla o corrisponde p

dovrebbe stamparmi a video
itrp
invece stampa
itrpp

ho provato a mettere un if ( c != EOF )
prima delle due printf
ma niente!
non riesco a capire perchè!

Loading