Problema array su file [C]

di Anonimizzato20424 il
8 risposte
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

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

    Ad esempio:
    char array[4][16];
  • Esatto adesso va perfettamente, potresti spiegarmi perchè
  • 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
  • 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);
    }
  • 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
  • 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.
  • 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