Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408

    [C] Leggere alternativamente interi da due file diversi

    Salve a tutti, ormai scrivo ogni giorno un problema diverso
    Ho un esercizio dove devo leggere dei numeri da due file diversi (ogni file ha 4 numeri) e devo creare due vettori:
    - il primo vettore è costruito leggendo i numeri in posizione DISPARI del PRIMO file e PARI del secondo file
    - il secondo vettore è costruito leggendo i numeri in posizione PARI del PRIMO file e in posizione DISPARI del SECONDO file

    Ho scritto il codice che secondo me andava bene, ma stampa numeri a casaccio e non capisco perchè.

    codice:
    #include <stdio.h>
    
    int main(){
        int v1[4]; // Dispari del primo file e pari del secondo file
        int v2[4]; // Pari del primo file e dispari del secondo file
        FILE *f1, *f2;
        int i;
        // Creazione primo vettore
        f1=fopen("1.txt", "r");
        for(i=0; i<4; i=i+2){
            fscanf(f1, "%d", &v1[i]);
        }
        fclose(f1);
        f2=fopen("2.txt", "r");
        for(i=1; i<4; i=i+2){
            fscanf(f2, "%d", &v1[i]);
        }
        fclose(f2);
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Proponendo subito al forum il problema senza rifletterci almeno un paio di giorni (!), non ti aiuterà ad imparare molto ...

    Prima di tutto dove "visualizzi" i numeri a casaccio? E di quale vettore (dato che v2 non lo usi proprio)?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Originariamente inviato da oregon
    Proponendo subito al forum il problema senza rifletterci almeno un paio di giorni (!), non ti aiuterà ad imparare molto ...
    Purtroppo ho l'esame fra 5 giorni, studio giorno per giorno e se facessi un esercizio ogni 2-3 giorni non ce la farei a prepararmi in tempo
    Il professore all'Università ci metteva tutte e 3 le ore di lezione per fare un esercizio base, perchè spiegava lentamente e in modo incomprensibile. Esercizi di questo genere li ho dovuti imparare da solo, e li capisco. Ma ogni volta che mi imbatto in un nuovo problema, ho la necessità di dover capire subito il problema perchè il tempo scorre e l'esame si avvicina.

    Originariamente inviato da oregon
    Prima di tutto dove "visualizzi" i numeri a casaccio? E di quale vettore (dato che v2 non lo usi proprio)?
    Il secondo vettore non l'ho ancora usato perchè non riesco ancora a creare il primo. Li visualizzo quando vado a compilare, scrivendo così:
    codice:
    for(i=0; i<4; i++){
            printf("%d\n", v1[i]);
        }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da goatboy
    Purtroppo ho l'esame fra 5 giorni, studio giorno per giorno e se facessi un esercizio ogni 2-3 giorni non ce la farei a prepararmi in tempo
    Probabilmente avresti dovuto cominciare prima a fare esercizi, ma non è questo il problema ...

    Il secondo vettore non l'ho ancora usato perchè non riesco ancora a creare il primo.
    Qual è un esempio concreto di contenuto dei file e cosa ti aspetti che contenga il vettore ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Originariamente inviato da oregon
    Probabilmente avresti dovuto cominciare prima a fare esercizi, ma non è questo il problema ...
    No guarda, ti assicuro che esercizi li faccio dall'inizio del corso. Rileggi la modifica del post precedente e capirai..

    Originariamente inviato da oregon
    Qual è un esempio concreto di contenuto dei file e cosa ti aspetti che contenga il vettore ?
    Il primo file contiene, in colonna: 3 7 2 5
    Il secondo file contiene, in colonna: 4 6 1 9
    Prima uscivano numeri grandi a cavolo, poi ho aggiustato un pò e adesso mi esce: 3 4 7 6. Invece dovrebbe contenere 3 6 2 9 ..
    Ma davvero non capisco perchè.. il codice non è cambiato, è sempre quello che ho postato

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Allora qualcosa come

    codice:
        FILE *f1, *f2;
        int i, dummy;
    
        f1=fopen("1.txt", "r");
        f2=fopen("2.txt", "r");
        for(i=0; i<4; i++)
       {
    	if(i%2==0)
    	{
    		fscanf(f1, "%d", &v1[i]);
    		fscanf(f1, "%d", &dummy);
    	}
    	else
    	{
    		fscanf(f2, "%d", &dummy);
    		fscanf(f2, "%d", &v1[i]);
    	}
        }
        fclose(f1);
        fclose(f2);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Così funziona, grazie
    Perchè il mio codice non funzionava? Nel primo file la mia i aveva due valori, 0 e 2 (rispettivamente primo e terzo numero , ovvero 3 e 2).. perchè invece mi leggeva 3 e 7?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Per capire subito, dai un'occhiata a quante letture faccio dal file per ogni ciclo for e quante ne fai tu.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Originariamente inviato da oregon
    Per capire subito, dai un'occhiata a quante letture faccio dal file per ogni ciclo for e quante ne fai tu.
    Ho capito Di sicuro non me lo scordo più!
    Grazie infinite oregon!

  10. #10
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    quando apri il file fscanf legge sempre da inizio file
    quindi nel primo for leggi i primi due caratteri e le memorizzi su gli indici 0 e 2
    nel secondo for leggi sempre i primi due caratteri e le memorizzi negli indici 1 e 3

    io farei un ciclo for che legge da 0 <4 e memorizzo in una variabile
    di appoggio esempio k e all'interno del for
    inserisci tanti if e else if se i = 0 v1[i] =k
    se i = 2 v1[i] =k


    codice:
    f1=fopen("1.txt", "r");
        for(i=0; i<4;i++){  
            fscanf(f1, "%d", &k);
           if (i==0)
              v1[i] =k;
           else if(i==2)
             v1[i] =k;
    
        }
        fclose(f1);
        f2=fopen("2.txt", "r");
        for(i=0; i<4; i++){
            fscanf(f2, "%d", &k);
          
           if (i==1)
              v1[i] =k;
           else if(i==3)
             v1[i] =k;
        
        }
        fclose(f2);
    Tecnologia

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.