Programma in C che deve scambiare ordine lettere da file

di Anonimizzato25148 il
3 risposte
Ciao a tutti, devo creare un programma che, dato un file di testo, scambi l'ordine delle lettere in ogni parola per ogni riga, e metta il risultato in un altro file, che viene creato dal codice
(es Sparsa le trecce morbide
sull'affannoso petto
Deve diventare: edibrom eccert el asrapS
ottep osonnaffa'llus)
Ho usato due funzioni per lo scambio di elementi di un array, ma sento che sono ancora in alto mare, metto qua sotto il programma
#include <stdio.h>
#include <stdbool.h>
#include <string.h>

#define L_STR 81
#define N 50

/*
IP descr Descrizione della stringa da leggere.
IK+OP strLetta Stringa letta.
*/
void readString(const char* descr, char* strLetta) {
    printf("%s", descr);
    scanf("%s", strLetta);
} /* readString */

void swap(char *a, char *b) {
    char c = *a;
    *a = *b;
    *b = c;
}

int arrSwap(char *p, int n){
    int i;
    for(i=0; i<n/2; i++)
       swap(&p[i],&p[n-i-1]);
	return *p;
} /* arrSwap */
 
int inverseLine(const char *nomeFI, const char *nomeFO){
	int i;
	char ch[L_STR],ch2[L_STR];
	FILE *inF, *outF;
	inF=fopen(nomeFI, "r");
	if(inF == NULL)
        return -1;
	outF=fopen(nomeFO, "w");
	if(outF==NULL)
		return -2;
	while(true){
		fgets(ch,L_STR,inF);
		if(feof(inF))
			break;
		for(i=0;i<N;i++){
			ch2[i]=arrSwap(ch,N);
			fprintf(outF,"%s\n",ch2);
		}
	}
	fclose(inF);
	fclose(outF);
	return 0;
}

int main(void) {
    char nomeFI[L_STR], nomeFO[L_STR];
    readString("Nome del file d'input: ", nomeFI);
    readString("Nome del file d'output: ", nomeFO);
    printf("Il file %s e` stato elaborato in %s con esito %d.\n",
      nomeFI, nomeFO, inverseLine(nomeFI, nomeFO));
    return 1;
} /* main */
Per adesso il file che mi crea come output mi dà dei valori a caso, vorrei capire dove sbaglio

3 Risposte

  • Le due funzioni che seguono le dovresti modificare così
    
    void arrSwap(char *p, int n){
        int i;
        for(i=0; i<n/2; i++)
           swap(&p[i],&p[n-i-1]);
    } /* arrSwap */
     
    int inverseLine(const char *nomeFI, const char *nomeFO){
    	char ch[L_STR];
    	FILE *inF, *outF;
    	inF=fopen(nomeFI, "r");
    	if(inF == NULL)
            return -1;
    	outF=fopen(nomeFO, "w");
    	if(outF==NULL)
    		return -2;
    
    	while(true)
    	{
    		fgets(ch,L_STR,inF);
    		if(feof(inF)) break;
    		
    		int cl=strlen(ch);
    		ch[cl-1]='\0';
    		arrSwap(ch, cl);
    		
    		fprintf(outF,"%s\n",ch);
    	}
    
    	fclose(inF);
    	fclose(outF);
    	return 0;
    }
    
  • In questo modo mi crea un file vuoto, è possibile?
  • No
Devi accedere o registrarti per scrivere nel forum
3 risposte