[C] File e stringhe

di il
12 risposte

[C] File e stringhe

Ciao a tutti
ll programma che mi sta dando un pò di problemi e che a primo impatto mi è sembrato un pò banale, consiste nel prendere da un file un numero N di parole e cancellarne le lettere in posizione pari.
Esempio: "dati.txt" input: ciao secchio libro output su schermo: ca scho lbo
Ho scritto questo ma non va:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define SIZE 30

int main()
{int N,i,l,j;
 char name[SIZE][SIZE],t[SIZE][SIZE];
 FILE *input=NULL;

 input=fopen("dati.txt","r");
 if(input==NULL)
 {printf("Error!");
 return 1;
  }
N=0;
while (fscanf(input,"%s",name[N])>0)
 {N++;}
printf("Sono state rilevate %d parole\n",N);
l=strlen(name);
for(i=0;i<N;i++)
 {
  for(j=0;j<l;j++)
     {if(j%2)
       {t[i][j]=name[i][j];}
     }
  t[i][j]= '\0';
 }
printf("Le parole sono diventate: ");
for(i=0;i<N;i++)
 {printf("%s ",t[i]);
  }


fclose(input);
return 0;
}
Grazie a chi risponderà

12 Risposte

  • Re: [C] File e stringhe

    Spiega cosa "non va" ... errori di compilazione ? Esecuzione ? Cosa succede ?
  • Re: [C] File e stringhe

    Errori di compilazione e di conseguenza nell'esecuzione
  • Re: [C] File e stringhe

    Deciditi ... di compilazione o esecuzione?

    Nel primo caso dovresti avere un preciso messaggio di errore del compilatore e l'esecuzione non potrebbe neanche essere possibile.
  • Re: [C] File e stringhe

    Ok mi spiego meglio Inizialmente mi dava errori di compilazione e quindi non poteva eseguirlo, com'è logico che sia. Ora però ti posto lo stesso programma modificato in modo tale che non mi dia più errori di compilazione.
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define SIZE 30
    
    int main()
    {int N,i,l,j,h;
     char name[SIZE],t[SIZE];
     FILE *input=NULL;
    
     input=fopen("dati.txt","r");
     if(input==NULL)
     {printf("Error!");
     return 1;
      }
    N=0;
    while (fscanf(input,"%s",name[N])>0)
     {N++;}
    printf("Sono state rilevate %d parole\n",N);
    
    for(h=0;h<N;h++)
     {l=strlen(name);
      for(i=0;name[i]!='\0';i++)
         if(i%2)
           t[j++]=name[i];
         
      t[j]= '\0';
      for(i=0;i<=j;i++)
      name[i]=t[i];
      
     
     }
    printf("Le parole sono diventate: ");
    for(h=0;h<N;h++)
     {printf("%s ",t[h]);
      }
    fclose(input);
    return 0;
    }
    Ora il problema è nell'esecuzione. Grazie per la pazienza
  • Re: [C] File e stringhe

    C'è un errore di fondo ... tu pensi che questo

    char name[SIZE]

    sia un array di stringhe, tanto che pensi di leggerle così ...

    while (fscanf(input,"%s",name[N])>0)

    ma in realtà quello è un semplice array di char (una sola stringa per il C) ...
  • Re: [C] File e stringhe

    Inizialemnte avevo dichiarato così:
    char name[SIZE][SIZE];
    solo che se lo scrivo così poi mi tornano gli errori di compilazione.
    Per favore, mi potresti far vedere come lo scriveresti tu questo programma se ti va?
  • Re: [C] File e stringhe

    Bisogna avere tempo e voglia ...

    Prova con la matrice come avevi detto e cerca di correggere gli errori che si presentano ragionandoci un po'
  • Re: [C] File e stringhe

    E' una settimana che ci ragiono su. Grazie comunque
  • Re: [C] File e stringhe

    Non rinunciare ... posta il codice con la matrice e vediamo gli errori ...
  • Re: [C] File e stringhe

    Ok non rinuncio...
    Ecco qui:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define SIZE 30
    
    int main()
    {int N,i,l,j,h;
     char name[SIZE][SIZE],t[SIZE];
     FILE *input=NULL;
    
     input=fopen("dati.txt","r");
     if(input==NULL)
     {printf("Error!");
     return 1;
      }
    N=0;
    while (fscanf(input,"%s",name[N])>0)
     {N++;}
    printf("Sono state rilevate %d parole\n",N);
    
    for(h=0;h<N;h++)
     {
      for(i=0;name[i]!='\0';i++)
         if(i%2)
           t[j++]=name[h][i];
         
      t[j]= '\0';
      for(i=0;i<=j;i++)
      name[h][i]=t[i];
      
     
     }
    printf("Le parole sono diventate: ");
    for(h=0;h<N;h++)
     {printf("%s ",t);
      }
    fclose(input);
    return 0;
    }
    Scrivendo così il compilatore non mi segnala più alcun errore, ma il programma non va lo stesso, nel senso che mi esce la schermata di windows che dice che il programma ha smesso di funzionare e mi da la possibilità di scegliere se cercare una soluzione online e chiudere il programma o chiudere solo il programma... spero tu abbia capito a quale schermata mi riferisco (non me la fa caricare come immagine in allegato )
  • Re: [C] File e stringhe

    Se vuoi conservare delle parole in un altro array anche quello deve essere bidimensionale. Quindi anche t deve essere [SIZE][SIZE]

    Inoltre la copia di una stringa in un'altra stringa in C non si fa con = ma con usando la funzione strcpy

    Infine mi pare che j non abbia un valore iniziale ...
  • Re: [C] File e stringhe

    Io farei circa cosi:_
    
    #define SIZE_ROWS 100
    #define SIZE_COLUMNS 100
    
    int main()
    {
        puts("Hy");
    
        FILE* input=fopen("dati.txt","r");
            if(input==NULL)
            {
                printf("mannaggia!");
                return -1;
            }
    
        int read;
        int word = 0;
        int stword = 1;
        int onstep = 0;
        int r;
        int c = 0;
    
        char buffer[SIZE_ROWS][SIZE_COLUMNS];
            for (r=0; r < SIZE_ROWS ; r++) buffer[r][0]='\0';
    
        r = 0;
        while ( (read=fgetc(input)) != EOF )
        {
            if ( (read >= 'a' && read <= 'z') || (read >= 'A' && read <= 'Z') )
            {
                if (stword)
                {
                    word++;
                    stword = 0;
                }
    
            }
            else if ( read == ' ')
            {
                buffer[r][c++]=read;
                stword = 1;
                onstep = 0;
                continue;
            }
    
            if (!onstep) buffer[r][c++]=read;
    
            if ( read == '\n')
            {
                if (onstep) buffer[r][c++]='\n';
                buffer[r][c]='\0';
                c = 0;
                r++;
                stword = 1;
            }
    
            onstep =~onstep;
        }
    
    
    
        fclose(input);
    
        printf ("Ho letto %d parole\ne ho tradotto in:\n",word);
    
        r = 0;
        while ( buffer[r][0] != '\0')
            printf("%s",buffer[r++]);
    
        return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
12 risposte