Leggere da FILE...

di il
5 risposte

Leggere da FILE...

Salve ragazzi sto trovando problemi a svolgere una cosa banale(lo è) ma che non riesco a risolvere....

vi spiego semplicemente che voglio creare un programma che legge da file caratteri e li'nserisca in una matrice..... però quando incontra lo spazio non lo deve inserire nella matrice..

uso la funzione fscanf perchè prende un carattere alla volta e lo so che potrei usare fgets ma a me serve prendere un carattere alla volta e controllare che non prenda gli spazzi..
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

/*
 * 
 */
int main() {
    char nomefile[30],mat[5][30],c;
    int i,j,cont=0,x=0,y=0;
    FILE *fp;
    
    printf("Digita nome file=");
    scanf("%s",nomefile);
    
       do{
        if((fp=fopen(nomefile,"r"))==NULL){
            printf("\nIl file non e stato aperto/trovato.");
            printf("\n Digita di nuovo il nome del file(con estensione)=");
            scanf("%s",nomefile);
        }
    }while(fp==NULL);
    
    while(!feof(fp)){
            if(((c=getc(fp))!=' ')&&(c!='\n')){
            mat[x][y]=c;
            y++;
            cont++;
            }
            else if(c=='\n'){
                x++;
            }
        }
    
      for(i=0;i<x;i++){
        for(j=0;j<y;j++){
    printf("\n%c",mat[i][j]);
        }
      }
    printf("\nCi sono %d lettere",cont);
    return 0;
}

nel file ci sono:
abc
sgf
dgf
ma mi stampa le prime 3 e poi cose senza senzo o mancanti.... aiutatemi per favore...

5 Risposte

  • Re: Leggere da FILE...

    Ciao
    il primo errore sta

    guardiax ha scritto:


    while(fp==NULL)
    cosi fa il ciclo se l'apertura del file non è andata a buon fine
    documentazione della fopen
    http://digilander.libero.it/uzappi/C/librerie/funzioni/fopen.html
    secondo errore
    dove hai messo fscanf ?
    che non riesco a trovarla!
    inizia a correggere e poi ne parliamo
  • Re: Leggere da FILE...

    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
    char nomefile[30],mat[5][30],c;
    int i=0,j=0,cont=0,x=0,y=0;
    FILE *fp;
    
    printf("Digita nome file=");
    scanf("%s",&nomefile);
    
    
    fp=fopen(nomefile,"r");
    
    while(!feof(fp)){
        fscanf(fp,"%c",&c);
        j++;
        if((c!='\n')&&(c!=' ')){
            i++;
            printf("%c",c);
        }
    }
    printf("\n%d-%d",i,j);
    return 0;
    }
    durante l'attesa ho aggiustato un pò... per il fatto del while non ho problemi cosi funziona perchè ripeterà il ciclo finchè non riuscirà ad aprire il file cioè la condizione fp==NULL sia falsa.... ora riesco a leggere da file (tutta la roba del mio file cioè "abc def ghi"ma con i contattori vedo che compiè 18 passaggi e togliendo il new line e lo spazio scende a 13 ma nel file ci sono solo 9 caratteri cm e possibile?? mercoledì ho l'esame spero che risolviamo presto....
  • Re: Leggere da FILE...

    Allora il file come lo hai scritto?
    perchè se è scritto
    abc
    def
    ghi
    e normale che ti legga 18 caratteri perchè ogni invio viene conteggiato per 2 in quanto il new line ha sia il codice della nuova linea che il ritorno carrello.
    quindi 3 linee x 2 caratteri =6
    9 caratteri dati
    3 spazi
    totale 18 caratteri.
    adesso se vuoi sapere solo quanti caratteri/dati ci sono basta che quando fai il confronto con spazio e il new line non aggiorni il contatore
    per quanto riguarda il problema del new line devi verificare anche il carattere di ritorno carrello.
    io ti suggerirei di fare:
    if (c>='!' && c<='}' { i++; printf("%c",c);
        }
    cosi in un sol colpo escludo sia lo spazio che il doppio carattere del new line.
    ti ho consigliato questo range perchè in esso ci sono grosso modo tutti i caratteri normalmente utilizzati.
    spero di esserti stato di aiuto
  • Re: Leggere da FILE...

    
    int c;
    while( (c=fgetc(fp)) != EOF )
    {
        ++j;
        if ( c != '\r' && c != '\n' && c != ' ' )
        {
            ++i;
            putchar(c);
        }
    }
    
    Sotto windows il ritorno a capo è composto da \r\n
  • Re: Leggere da FILE...

    Grazie ora ho capito :DDDDDD grazie mille
Devi accedere o registrarti per scrivere nel forum
5 risposte