Testo inesistente

di il
2 risposte

Testo inesistente

Ciao a tutti,

sono alle prese con un dilemma relativo, non tanto ad un processo logico, quanto ad un risultato.
Ho scritto un programma che legge un testo da un file e stampa su un secondo file il testo con le linee invertite.
Il programma funziona abbastanza bene, ma quando stampa l'ordine inverso, aggiunge dei caratteri che non sono presenti nel file.
Mi chiedevo da cosa potesse essere dovuto e come poter risolvere.
Vi allego delle schermate per farvi un'idea.
Questo il testo di partenza salvato in un file .txt:
Ciao
Questa frase e' lunga
Bello
Mi chiamo Tom
Come stai?
/*Here a program to invert the line to read*/
#include <stdio.h>
#include <stdlib.h>

int main(){
	FILE *fpR, *fpW;
    char filenameR[20], filenameW[20];
    char ch;
    char text[100][20], temp[100];
    int j=0, i=0;
    
    printf("enter the name of file to read:\n");
	scanf("%s", filenameR);
	printf("enter the name of file to copy in:\n");
	scanf("%s", filenameW);
 
    fpR = fopen(filenameR, "r");
    fpW = fopen(filenameW, "w");
 
    if(fpR == NULL)
    {
        printf("Error opening file %s\n", filenameR);
        exit(1);
    }
    if(fpW == NULL)
    {
        printf("Error opening file %s\n", filenameW);
        exit(1);
    }
    printf("Text in the original file is:\n");
    while(fscanf(fpR, "%c", &ch) != EOF){
    	fprintf(fpW, "%c", ch);
		text[i][j]=ch;
		if(ch!='\n'){
			i++;
		} else {
			j++;
		}
	}
	printf("\nHere you can read it reversed:\n");		
	while(j!=0){
		for(i=0;i<100;i++){
			if(text[i][j]=='\n'){
				break;
			}
			fprintf(fpW, "%c", text[i][j]);
		}
		fprintf(fpW, "\n");
		j--;
	}
	fclose(fpR);
	fclose(fpW);
	return 0;
}
Mentre questo è il risultato:
Ciao
Questa frase e' lunga
Bello
Mi chiamo Tom
Come stai?
 Ô   M                        ` O û M   O     M        O Ö       z            º  pp    
 S ð   0   ø   ø         H ¹ P Y    Come stai?
              c   c          Mi chiamo Tom
n b     n   n ?   M      Bello
M ø Questa frase e' lunga
Grazie mille per la pazienza.

2 Risposte

  • Re: Testo inesistente

    Hai scambiato righe e colonne dell'array e dimenticato ad azzerare qualche contatore ... comunque queste potrebbero essere le correzioni al tuo codice
    
    	char text[20][100];
    	int j = 0, i = 0;
    	while (fscanf(fpR, "%c", &ch) != EOF) {
    		fprintf(fpW, "%c", ch);
    		text[i][j] = ch;
    		if (ch != '\n') {
    			j++;
    		}
    		else {
    			i++;
    			j = 0;
    		}
    	}
    
    	i--;
    
    	printf("\nHere you can read it reversed:\n");
    	while (i>=0) {
    		for (j = 0; j<100; j++) {
    			fprintf(fpW, "%c", text[i][j]);
    			if (text[i][j] == '\n') {
    				break;
    			}
    		}
    		i--;
    	}
    
  • Re: Testo inesistente

    Davvero Grazie Mille Oregon. Ho capito l'errore.
    Ora funziona perfettamente.
Devi accedere o registrarti per scrivere nel forum
2 risposte