Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2014
    residenza
    Sardegna
    Messaggi
    18

    [C] Problema con fscanf e fprintf usando stringhe

    Ciao a tutti!

    Sto incontrando qualche problema con un programma che, da un file, prende in input delle stringhe e le stampa in un altro file.

    Nel programma uso un array di stringhe per memorizzare le stringhe del file base e lo stesso array viene usato per stampare il tutto. Il problema è che, nel secondo file (quello in cui stampo le stringhe ricevute in input dal file base), viene stampata solo la prima stringa: le altre non vengono stampate. Ecco il programma:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAXROW 100      ///definisco il massimo di righe dell'array di stringhe
    #define MAXCOLUMN 100   ///definisco il massimo di colonne dell'array di stringhe
    
    int main(){
        char testo[MAXROW][MAXCOLUMN];  ///dichiarazione dell'array di stringhe
        int i;                          ///contatore
        FILE *filepntrR = NULL;         ///puntatore al file dal quale leggo le stringhe
        FILE* filepntrW = NULL;         ///puntatore al file nel quale scrivo le stringhe prese da filepntrR
    
        /**
            Apro i file, in modalità (rispettivamente) di lettura e scrittura,
            ed esco se il puntatore contiene NULL dopo averlo provato ad aprire
        **/
        filepntrR = fopen("c:/users/utente/desktop/test.txt", "r");
        filepntrW= fopen("c:/users/utente/desktop/testmod.txt", "w");
        if(filepntrR == NULL || filepntrW == NULL){
            printf("Errore");
            exit(EXIT_FAILURE);
        }
    
        /**
            Assegno la stringa "nulla" a tutte le stringhe dell'array testo[]
        **/
        for(i = 0; i < MAXROW; i++){
            strcpy(testo[i], "nulla");
        }
    
        /**
            In questo ciclo, che si ferma quando la variabile i raggiunge il valore di MAXROW,
            prendo in input la stringa con gli spazi, memorizzandola nella variabile testo[] e
            vado a capo
        **/
        for(i = 0; i < MAXROW; i++){
            fscanf(filepntrR, "%[^\n]s\n", testo[i]);
        }
    
        /**
            In questo ciclo, che si ferma quando la variabile i raggiunge il valore di MAXROW,
            stampo il contenuto delle stringhe della variabile testo[] nel file filepntrW
        **/
        for(i = 0; i < MAXROW; i++){
            fprintf(filepntrW, "%s\n", testo[i]);
        }
    
        ///Chiudo i file utilizzati
        fclose(filepntrR);
        fclose(filepntrW);
    
        return 0;
    }

    Il file dal quale traggo i dati è un file che ho creato io in cui ho scritto caratteri a casaccio (niente caratteri speciali e qualche spazio tra una "parola" e l'altra: un file innocuo, sostanzialmente).
    Il compilatore non segnala né errori né warning, quindi sono un po' confuso. Se può servire, le stringhe che dovrebbero contenere i caratteri che ho scritto nel file base contengono il valore di inizializzazione (ovvero la sringa "nulla") e, in una versione precedente del programma, il compilatore segnava un warning nella fscanf (non gli piaceva lo specificatore %[^\n]s).

    Please help me, I'm losing my mind Cosa sto sbagliando?

    EDIT: aggiunto ciclo che inizializza l'array delle stringhe
    Ultima modifica di alemutasa; 22-03-2016 a 11:33

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Perché non usi semplicemente

    fscanf(filepntrR, "%s", testo[i]);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2014
    residenza
    Sardegna
    Messaggi
    18
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Perché non usi semplicemente

    fscanf(filepntrR, "%s", testo[i]);
    Eh magari potessi, le stringhe hanno anche spazi e, specificando solo %s, l'acquisizione si fermerebbe al primo spazio che la scanf incontra. Cioè, le stringhe nel file sono del tipo

    "isdjf sdjfi jsidf".

    Usando solo %s, in questo caso, avrei solamente "isdjf"!

Tag per questa discussione

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.