Problema array su file [C]

di il
8 risposte

Problema array su file [C]

Ciao ragazzi ho un problema non riesco a leggere delle stringhe su un file di testo tramite il compilatore. Sono 4 nomi e dovrei leggerli da file e stamparli a video ma non definisco l'array in modo esatto, questo è il codice:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char array[4];

int i, num;

num = 4;

FILE *fpr;

fpr = fopen("stringhe.txt", "r");
if (fpr == NULL) {
printf("Errore nell'apertura del file");
return -1;
}

printf ("Le stringhe sono: ");
for(i=0;i<num;i++){
fscanf (fpr, "%s ", &array);
printf("%s ", array);
}

fclose(fpr);
return 0;
}

8 Risposte

  • Re: Problema array su file [C]

    Ritengo tu abbia bisogno di una matrice bidimensionale di tipo char, anziché di un array monodimensionale.

    Ad esempio:
    char array[4][16];
  • Re: Problema array su file [C]

    Esatto adesso va perfettamente, potresti spiegarmi perchè
  • Re: Problema array su file [C]

    E non riesco ad elaborare un codice che mi inverta le stringhe ad esempio michele diventa elehcim ecc. Ho provato con strlen - 1 ma niente
  • Re: Problema array su file [C]

    Gianfranco00 ha scritto:


    potresti spiegarmi perchè
    In vero, vedendo questa riga del tuo codice
    fscanf (fpr, "%s ", &array[i]);
    mi ero convinto che volessi - oltre che stampare - anche memorizzare le parole presenti nel file per un uso successivo nel programma.
    Io ti ho dunque proposto una matrice con due dimensioni:
    * la prima stabilisce che le righe della matrice, ove saranno memorizzati i caratteri componenti ciascuna parola, sono 4, ossia di numero eguale a quello delle parole da leggere presenti nel file;
    * la seconda stabilisce che ciascuna delle predette righe della matrice è costituita da un numero di elementi sufficiente (16) a contenere i caratteri che compongono ogni parola letta dal file.

    Più tardi ripensando al tuo codice, mi sono reso conto che il tuo intento era solo e semplicemente quello di leggere le parole presenti nel file e stamparle nel terminale. Pertanto, puoi agevolmente utilizzare anche l'array monodimensionale da te proposto, preferibilmente aumentando sufficientemente il suo numero di elementi previsti ed apportando qualche semplice modifica alla parte di codice appresso indicata:
    for(i=0;i<num;i++){
       fscanf (fpr, "%s ", array);
       printf("%s ", array);
    }
  • Re: Problema array su file [C]

    Si in effetti dopo aver letto i nomi dovrei usare l'array per invertire tutti e 4 i nomi e riscriverli su un nuovo file, ma non riesco a invertire i file cioè non riesco a ricavare una porzione di codice che svolga questa operazione, ho provato contanto la stringa con strlen - 1 > strlen ma non riesco
  • Re: Problema array su file [C]

    Gianfranco00 ha scritto:


    ... un codice che mi inverta le stringhe ad esempio michele diventa elehcim ecc.
    Prova a vedere queste discussioni:
    * https://www.iprogrammatori.it/forum-programmazione/cplusplus/come-invertire-nome-t27781.html
    * https://www.iprogrammatori.it/forum-programmazione/cplusplus/topic-t28839.html
    * http://www.pierotofy.it/pages/extras/forum/2/76940-stampare_stringa_al_contrario/
  • Re: Problema array su file [C]

    Gianfranco00 ha scritto:


    ho provato contanto la stringa con strlen - 1 > strlen ma non riesco
    Mostra come hai tentato di fare e indica cosa non va.
  • Re: Problema array su file [C]

    Se si tratta soltanto di mostrare meramente la parola invertita, mi era venuta in mente una ipotesi come il seguente codice esemplificativo:
    #include <stdio.h>
    #include <string.h>
    
    
    int main() {
    
    	char c[16] = "parola";
    	printf("%s --> ", c);
    
    	char n, r, h=strlen(c);
    	r = h;
    
    	for (n=strlen(c)-1; n>-1; n--)
    		*(c+ h++) = *(c+n);
    	
    	strcpy(c, c+6);
    
    	printf("%s\n", c); 
    
    
          return (0);
    
    }
Devi accedere o registrarti per scrivere nel forum
8 risposte