Re: [C] Gestione File E Vettori

Messaggioda mide » 02/02/2017, 15:34

il problema potrebbe essere nella sscanf e nella fgets dato che la variabile "riga" è di tipo intero.
A cosa ti serve sscanf? Prova a fare semplicemente:
Codice:
 while(fgets(nome, lun, f) != NULL)
    {         
        strcpy(v[i], nome);
        printf("nome: %s \n", v[i]);
        i++;
    }


Devi incrementare la "i" dopo che stampi, altrimenti vai a finire nella posizione successiva dove non è ancora stato scritto niente.
Se funziona puoi cambiare "nome" direttamente con v[i] dato che non fai altre operazioni. Ma questo è solo per farlo breve.
mide
Junior Member
Junior Member
 
Messaggio: 22 di 344
Iscritto il: 27/01/2017, 23:08

Re: [C] Gestione File E Vettori

Messaggioda davicos » 02/02/2017, 17:21

Risolto, avevo fatto confusione con i cicli e stampava altro.
In definitiva è così:

Codice:
#include <stdio.h>
#include <string.h>

#define max_nomi 10
#define lun 20
#define max 20

int main(int argc, char* argv[])
{
    int riga[lun +1], i=0, y=0;
   
    char s[max +1], nome[max_nomi][max +1];
   
    FILE *f;
    f = fopen("testo.txt","r");
   
    if(f == NULL)
    {
        printf("errore");
        return (1);
    }
   
    while(fgets(riga, lun, f) != NULL)
    {   
       
        printf("%s", riga);
        sscanf(riga,"%s \n", s);
       
             
        strcpy(nome[i], s);
        i++;
       
       
       
    }
   
   
    for(int i=0; i<max_nomi; i++)
    {
       
        printf("Nome: %s \n", nome[i]);
       
    }
   
    return 0;
}
davicos
Average Member
Average Member
 
Messaggio: 282 di 862
Iscritto il: 16/09/2015, 11:24

Re: [C] Gestione File E Vettori

Messaggioda davicos » 02/02/2017, 17:25

Il problema più grande adesso è quello di mettere i nomi una sola volta in un vettore.
In linea di massima dovrebbe esser così: leggo il primo nome e lo metto dentro il vettore. Leggo il secondo nome e lo confronto con tutte le celle del vettore e se tale nome non è ripetuto allora lo metto dentro il vettore nella cella successiva e così via. Il problema è che il nome ripetuto può essere in una qualsiasi posizione del vettore quindi almeno una volta NON è presente e quindi me lo andrà a copiare. Mi sono spiegato?
Come faccio a fare in modo che non copi il nome anche se solo una volta lo ha trovato nel vettore?
davicos
Average Member
Average Member
 
Messaggio: 283 di 862
Iscritto il: 16/09/2015, 11:24

Re: [C] Gestione File E Vettori

Messaggioda mide » 02/02/2017, 17:41

Non capisco come faccia a funzionare se la fgets prende come primo parametro una stringa, mentre ne tuo programma c'è un intero (http://www.cplusplus.com/reference/cstdio/fgets/) :smt017 :smt017 . Comunque se dici che funziona...
Per quanto riguarda il tuo problema, si può fare in tanti modi. Un modo semplice è quello di scorrere il vettore con un ciclo e controllare se c'è il nome in analisi. Se esiste già, attivi un flag (semplicemente poni True una variabile booleana). Alla fine del ciclo (cioè fuori) controlli: se il flag è False scrivi il nome nell'ultima posizione, altrimenti niente.
Spero di aver capito il problema.
mide
Junior Member
Junior Member
 
Messaggio: 23 di 344
Iscritto il: 27/01/2017, 23:08

Re: [C] Gestione File E Vettori

Messaggioda davicos » 02/02/2017, 18:22

Si hai capito bene. Ci proverò allora. Grazie di tutto!
davicos
Average Member
Average Member
 
Messaggio: 284 di 862
Iscritto il: 16/09/2015, 11:24

Re: [C] Gestione File E Vettori

Messaggioda mide » 02/02/2017, 19:03

Figurati!
mide
Junior Member
Junior Member
 
Messaggio: 24 di 344
Iscritto il: 27/01/2017, 23:08

Precedente

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite