Array di char da file di testo!

di il
2 risposte

Array di char da file di testo!

Ragazzi ho un problema che davvero nn riesco a capire....
Ho un semplice file di testo cn dentro dei nomi...

fabio
marco
giulio
luca

Ora quando apro il file vorrei mettere ciascuna stringa in un array ci caratteri..
Es.. a[0] ci voglio mettere fabio.
in a[1] ci voglio mettere marco etc..

Il problema è ke l'array è cm se si sovrascrivesse...ogni volta nella posizione a[0] la parola precedente viene sostituita cn quella di dopo...

f = fopen("input.txt", "r");

while(!feof(f)){

fscanf(f,"%s",num);

a[count++]= num;

cout << "Valore:" << a[0] <<endl;
}

Mi esce: fabio
marco
giulio
luca...........ma a[0] dovrebbe essere sempre fabio! io la variabile count la incremento!

se alla fine faccio il for per la stampa degli elementi:

for(int i=0; i<n; i++)
cout < a;

mi esce: luca luca luca luca
dovrebbe essere: fabio marco giulio luca..........MA DOVE DIAVOLO SBAGLIO!!!

VI METTO TUTTO IL CODICE COMUNQUE:

#include <string.h>
#include <fstream>
#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
FILE *f;
char *a[10];

char num[10];
int count = 0;

f = fopen("input.txt", "r");

while(!feof(f)){

fscanf(f,"%s\n",num);

a[count++]= num;

cout << "Valore:" << a[1] <<endl;
}

return(0);
}

Ragazzi se potete darmi una mano vi ringrazio perchè davveromi sto scervellando...ma niente!

2 Risposte

  • Re: Array di char da file di testo!

    Una stringa è un array di char, fabio, luca, ecc.. sono tutte stringhe e ognuna di esse va in un solo array di char. Quello che vuoi fare tu si ottiene con una matrice:
    
    char matrice[10][10];
    int i = 0;
    FILE* file;
       file = fopen("aaaa","r");
    while(!feof(file))
    {
    fscanf(file, "%s",&matrice[i][0]);
    i++;
    }
    fclose(file);
    
    
    in questo modo è come se avessi 10 array di 10 elementi ciascuno di tipo char.
    Attenzione che la i deve essere sempre minore di 10 e che i caratteri della stringa siano anchessi minori di 10
  • Re: Array di char da file di testo!

    Overflow ha scritto:


    una stringa è un array di char, fabio, luca, ecc.. sono tutte stringhe e ognuna di esse va in un solo array di char. Quello che vuoi fare tu si ottiene con una matrice:
    
    char matrice[10][10];
    int i = 0;
    FILE* file;
       file = fopen("aaaa","r");
    while(!feof(file))
    {
    fscanf(file, "%s",&matrice[i][0]);
    i++;
    }
    fclose(file);
    
    
    in questo modo è come se avessi 10 array di 10 elementi ciascuno di tipo char.
    Attenzione che la i deve essere sempre minore di 10 e che i caratteri della stringa siano anchessi minori di 10


    Ciao Fabiog,

    sono sicuro che ormai hai gia risolto la situazione, la matrice e una soluzione che funziona in modo ottimale. il punto e che tu cmq in certo senso la usavi gia...
    char *a[10] e un puntatore ad arrays di caratteri, quindi e come una matrice...
    "char *x => pt ad un char
    char x[9] => array di char ma anche il pt al primo elemento e infine char *a[10] e un puntatore ad arrayS di caratteri"

    il problema e la tua variablile num... tu ha ogni posizione di 'a' assegnavi num come rvalue
    a[0] = num
    a[1] = num
    a[2] = num
    a[3] = num

    e alla fine del ciclo num aveva il valore luca... e quindi e normale che ad ogni posizione di a[] avevi luca xke tutti puntavano a num che come ultimo valore aveva luca.

    Un altra soluzione meno bella e questa
    #include <string.h>
    #include <fstream>
    #include <iostream>
    #include <stdio.h>
    using namespace std;
    
    int main()
    {
    	FILE *f;
    	char *a[10];
    
    	char *num[10];
    	int count = 0;
    
    	f = fopen("input.txt", "r");
    	while(!feof(f)){
    		num[count] = (char*)malloc(sizeof(char));
    		fscanf(f,"%s\n",num[count]);
    		a[count] = num[count];
    		count++;
    	}
    	fclose(f);
    	int i;
    	for (i = 0;i < count;i++){
    		cout << "in position a["<<i<<"] we have "<<a[i]<<endl;
    		free(num[i]);
    	}
    
    	return 0;
    }
    Ciao spero di averti aiutato cmq il C/C++ sono a volte oscuri... solo la pratica aiuta... e google
Devi accedere o registrarti per scrivere nel forum
2 risposte