Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24

    [C] problema con un ciclo

    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?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Che vuol dire "ti è vietato il break"?

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24
    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!

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    while (!feof(file_chiaro) and !trovato)

    trovato va inizializzato a 0 prima del while.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24
    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.

  6. #6

    Re: [C] problema con un ciclo

    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...
    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:

    codice:
    		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); 
    		}
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  7. #7
    Utente di HTML.it L'avatar di dannie
    Registrato dal
    Aug 2005
    Messaggi
    336
    Nel tuo codice, così come l'hai postato, modifica il ciclo così:
    codice:
     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:
    codice:
    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);
    }

    PS corso universitario di C base eh?? Anche a me vietavano i break se non negli switch...

  8. #8
    Utente di HTML.it L'avatar di dannie
    Registrato dal
    Aug 2005
    Messaggi
    336

    Re: Re: [C] problema con un ciclo

    Originariamente inviato da Samuele_70
    Se ho capito bene...
    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:

    codice:
    		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!

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24
    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

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24
    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è!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.