[C] Gestione File E Vettori

Messaggioda davicos » 01/02/2017, 23:50

Salve a tutti,
vorrei fare un programma che letti da file dei nomi di persona conti quante volte ogni nome è comparso. Si tenga presente che il numero delle righe del file non è noto a priori ma al massimo possono comparire quattro nomi diversi.
Esempio contenuto del file:

lucia
alessandro
lucia
davide
marco
davide
marco

Nomi totali quattro con le rispettive molteplicità.
Come soluzione ho pensato a mettere ogni nome in un vettore (tanto la dimensione la conosco) e quel nome confrontarlo con tutti nomi presenti nel vettore, ma non so come copiare il nome dentro un vettore (che sarà una matrice con indice variabile e lunghezza totale del nome costante). Ho provato con il comando strcmp ma non funziona. Come fare?
Grazie!
davicos
Average Member
Average Member
 
Messaggio: 276 di 862
Iscritto il: 16/09/2015, 11:24

Re: [C] Gestione File E Vettori

Messaggioda mide » 02/02/2017, 09:56

Il comando strcmp confronta due stringhe, non copia niente. Per quello potresti provare "strcpy".
Se posso chiederlo, usi allocazione dinamica o statica?
mide
Junior Member
Junior Member
 
Messaggio: 18 di 344
Iscritto il: 27/01/2017, 23:08

Re: [C] Gestione File E Vettori

Messaggioda davicos » 02/02/2017, 11:39

Si scusa mi sono confuso intendevo la strcpy. Per allocazione statica o dinamica non capisco cosa vuoi dire..
davicos
Average Member
Average Member
 
Messaggio: 277 di 862
Iscritto il: 16/09/2015, 11:24

Re: [C] Gestione File E Vettori

Messaggioda mide » 02/02/2017, 11:57

Intendo se usi dei puntatori per creare un vettore(nel tuo caso anche una stringa) o una matrice. Comunque se riesci posta il codice, altrimenti è difficile vedere cosa c'è che non va nel programma.
mide
Junior Member
Junior Member
 
Messaggio: 19 di 344
Iscritto il: 27/01/2017, 23:08

Re: [C] Gestione File E Vettori

Messaggioda davicos » 02/02/2017, 13:12

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



#define n 4
#define lun 20
#define max 20
int main(int argc, char* argv[])
{
int riga[lun +1], i=0;
char nome[20 +1], v[n][max];
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", nome);
printf("\n");

v[i][max] = nome;

strcpy(v[i], nome);
i++;

printf("nome: %s \n", v[i][max]);


}


return 0;
}


Questo è solo la parte iniziale perchè non funzionando non ho fatto la parte dei contatori per i nomi. Il printf dopo ogni fine ciclo l'ho messo solo per verificare che effettivamente il nome era stato copiato nel vettore ma escono cose strane quindi il problema penso sia proprio questo.
Non utilizzo né funzioni né puntatori. Per adesso volevo solo fare una prova molto terra terra.
Grazie.
davicos
Average Member
Average Member
 
Messaggio: 278 di 862
Iscritto il: 16/09/2015, 11:24

Re: [C] Gestione File E Vettori

Messaggioda davicos » 02/02/2017, 13:13

Il codice è un pò difficile da leggere perchè non so che comandi usare per il formato in questo sito, quindi se mi dite come fare..
davicos
Average Member
Average Member
 
Messaggio: 279 di 862
Iscritto il: 16/09/2015, 11:24

Re: [C] Gestione File E Vettori

Messaggioda mide » 02/02/2017, 13:57

Allora, ad occhio ho trovato questi errori:
1)cosa volevi fare con questa istruzione?
Codice:
v[i][max] = nome;

toglila. Stai praticamente mettendo un array di char in un char. E' un errore dimensionale oltre che di sintassi.

2)Quando stampi la stringa devi fare così:
Codice:
printf("nome: %s \n", v[i]);

Facendo come hai fatto tu, praticamente stampi l'ultimo carattere della riga "i", e siccome quella riga non è piena fino all'ultima posizione, stampa caratteri a caso.

Non ho testato il programma ma prova a cambiare come ti ho detto e vedi cosa succede.

P.S. per inserire codice nel forum c'è il tag "Code". :smt039
mide
Junior Member
Junior Member
 
Messaggio: 20 di 344
Iscritto il: 27/01/2017, 23:08

Re: [C] Gestione File E Vettori

Messaggioda davicos » 02/02/2017, 14:35

La prima mi ero dimenticato di toglierla infatti non c'entra nulla, l'avevo messa per provare.

Il programma in definitiva è questo:

Codice:

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

#define n 4
#define lun 20
#define max 20

int main(int argc, char* argv[])
{
    int riga[lun +1], i=0;
    char nome[20 +1], v[n][max];
    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", nome);
        printf("\n");
       
        strcpy(v[i], nome);
        i++;
       
        printf("nome: %s \n", v[i]);
       
       
    }
   
   
    return 0;
}
davicos
Average Member
Average Member
 
Messaggio: 280 di 862
Iscritto il: 16/09/2015, 11:24

Re: [C] Gestione File E Vettori

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

Quindi hai risolto?
mide
Junior Member
Junior Member
 
Messaggio: 21 di 344
Iscritto il: 27/01/2017, 23:08

Re: [C] Gestione File E Vettori

Messaggioda davicos » 02/02/2017, 15:12

No, per come è il programma adesso non funziona, mi stampa alcuni caratteri strani ed altri invece non stampa niente.
davicos
Average Member
Average Member
 
Messaggio: 281 di 862
Iscritto il: 16/09/2015, 11:24

Prossimo

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite