Lettura caratteri da un file .txt

di il
10 risposte

Lettura caratteri da un file .txt

Salve ragazzi, non riesco a leggere un file .txt con il c++:

void loadText(string& text, FILE* textFile)
{
    char x;
    while (fscanf(textFile, "%s", &x) != EOF)
    {
    cout <<x;
    //fseek(textFile,sizeof(char),SEEK_CUR); Non sembra che il contatore si muova...
    }
}
Mi stampa su schermo soltanto la lettera iniziale del file. Perche'?
Comunque, il mio obbiettivo e' di leggere carattere per carattere e di caricarlo su una stringa.

10 Risposte

  • Re: Lettura caratteri da un file .txt

    Ahem.. risolto, dovevomettere "%c" perche' e' un carattere e non una stringa
    Stranamente avevo gia' provato, ma mi aveva dato qualche errore che non ricordo e l'avevo tolto..
    ______________________
    In ogni caso, non funziona la nuova procedura:
    void loadText(string& text, FILE* textFile)
    {
        char x;
        int i = 0;
        while(fscanf(textFile, "%c", &x) != EOF)
        {
            text[i] = x;
            i++;
        }
    cout <<text<<endl;
    }
    
    Se facessi il cout di ogni text all'interno del ciclo la stringa viene scritta, ma se facessi il cout di tutta la stringa text alla fine del caricamento non scrive niente...
  • Re: Lettura caratteri da un file .txt

    Non devi mischiare C e C++ se non sai farlo a ragion veduta.

    Nella string del C++ devi accumulare i caratteri aggiungendoli con
    
    	char x;
    
    	while(fscanf(textFile, "%c", &x) != EOF)
            text += x;
    
    	cout <<text<<endl;
    
    oppure utilizzi uno stream del C++ e non un file del C per leggere comodamente con
    
    void loadText(string& text, ifstream& textFile)
    {
    	getline(textFile, text);
    
    	cout <<text<<endl;
    }
  • Re: Lettura caratteri da un file .txt

    Non li mischierei volentieri, ma a scuola si ostinano a insegnarmi solo il C, e qualcosina del C++, come cin e cout e le stringhe.
    Anyway, grazie mille, ha funzionato!
    Comunque, perche' questo mi da' errore? //Risolto, dovevo scrivere come se fosse un carattere ' ' e non " ".
    if (text != " ")
    Dice che non puo' comparare un puntatore a un'intero [-fpermessive]...
    (main.cpp|167|error: ISO C++ forbids comparison between pointer and integer [-fpermissive]|)
    P.s. Giusto per curiosita', quando si dichiara un vettore di stringhe si scrive "string vettore[n]", e quando si deve utilizzare si scrive "vettore[n]".. Ma questo puo' essere utilizzato come un vettore di caratteri, una stringa in C, quindi come fa il pc a capire se scrivendo "vettore[n]" si sta intendendo la variabile numero "n" del vettore di stringhe oppure il carattere nella posizione "n + 1" della stringa vettore?
  • Re: Lettura caratteri da un file .txt

    Non so se il problema è il professore ma così diventa un problema imparare ...
  • Re: Lettura caratteri da un file .txt

    Devid1910 ha scritto:


    if (text != " ")


    Perché stai confrontando un char (la prima parte) con un puntatore a char (la seconda) e sono ovviamente cose diverse e non confrontabili.
    Ti faccio notare che " " è una costante stringa ed è rappresentata dal puntatore al suo primo carattere (indipendentemente da quanti caratteri è fatta); invece, ' ' con le virgolette semplice è un char e quindi confrontabile nella scrittura precedente che dovrebbe essere

    if (text != ' ')

    Per il resto, una stringa in C è un vettore di char ma in C++ è un oggetto. Il compilatore (non il PC) questo lo sa e quindi sa come trattare eventuali vettori di vettori di char (ovvero vettori di stringhe in C) oppure i vettori di oggetti string del C++.

    La confusione nasce dal fatto che fate i due linguaggi mischiando le cose. Prima dovreste essere sicuri di come funzionano le cose in C e solo dopo passare al C++.
  • Re: Lettura caratteri da un file .txt

    Ragazzi salve, riesumo questo vecchio post perché ho un problema simile, stavolta col C, non C++.

    Devo creare un programma che:
    1) Se lanciato con 2 o più argomenti nella riga di comando stampi un messaggio di errore;

    2) Se lanciato con 1 solo argomento conti l'occorrenze delle lettere della stringa passata come argomento;

    3) Se lanciato senza argomenti conta il numero di occorrenze del testo contenuto nel file "text.txt".


    I punti 1) e 2) funzionano perfettamente, ma quando al punto 3) il programma mi restituisce un cursore, come se volesse qualcosa in input, ma all'infinito.

    Qualcuno può farmi capire dove sbaglio? grazie a tutti!
    Ecco il codice:
    #include <stdio.h>
    #include <string.h>
    #define A_Z 26
    
    void occorrenze (char a[]) {
    	int i, j, conta[A_Z];
    	for(i=0; i<strlen(a); i++){
    			conta[i]=1;
    			for(j=i+1; j<strlen(a); j++)
    				if(a[i] == a[j])
    					conta[i]++;
    		}
    		for(i=0; i<strlen(a); i++){
    			for(j=i+1; j<strlen(a); j++)
    				if(a[i] == a[j])
    					conta[j]=0;
    		}
    		for(i=0; i<strlen(a); i++)
    		{
    			if(conta[i])
    				printf("%c = %d\n", a[i], conta[i]);
    		}
    	}
    
    int main(char argc, char *argv[]){
    	char str[50];  
    	FILE *fp = fopen ("text.txt", "r"); //il file text.txt contiene 42 caratteri in tutto
    	
    	if (argc > 2){
    		printf("Errore\n");
    	}
    	
    	else if (argc == 2) {
    		occorrenze (argv[1]);
    		}
    	if (argc == 1) {
    		fgets(str, sizeof(str), fp);
    		occorrenze(str);
    
    	}
    	fclose(fp);
    
    }
  • Re: Lettura caratteri da un file .txt

    Elya ... non si riesumano i vecchi post ... fra l'altro quello era per C++ ... creane uno tuo.
  • Re: Lettura caratteri da un file .txt

    Sì vabè, però non è che rispondete solo per "bacchettare". Ho letto il regolamento e dice "post molto vecchi". Alla fine il titolo non specificava "Per C++", quindi ho pensato che fosse meglio scriverlo qua che fare un altro post identico ma per C.

    Ad ogni modo, ne farò un altro.
  • Re: Lettura caratteri da un file .txt

    Questo è il thread di un altro utente. Perché mai dovrebbe diventare il tuo?

    Qui non si risponde per bacchettare ma si sta alle regole quando si fanno le domande.

    Così si fa solo confusione ... adesso tutti i problemi dei file txt li discutiamo qui?
  • Re: Lettura caratteri da un file .txt

    Non si riciclano thread altrui per inserire la propria richiesta di aiuto...
Devi accedere o registrarti per scrivere nel forum
10 risposte