[ Foro de C ]

Consulta dudas con archivo y cadena de caracteres

10-Dec-2015 20:16
Pablo Campos
1 Respuestas

Bueno me puse a jugar un poco con el codigo y cambie la ultima condicion del segundo for, dejandolo de la siguiente manera:


#include <stdio.h>
#include <string.h>

int main()
{
FILE *F;
F = fopen("Ar.txt","w+");
char c;
for(c='Z';c>= 'A';)
        {
        fputc(c--,F);
        }
fseek(F,0,0);
for(c='A';c<='Z' ;--c)// aqui esta mi duda****
        {
        printf("%c",fgetc(F));
        }
printf("\n\n");        
return (0);
}


/*
Lo que muestra por pantalla es desde la Z hasta la A. Pero al decrementarlo me muestra despues de la A me muestra basura. Mi pregunta es:
1º Lo decrementa hasta donde? porque no me da bucle infinito al ejecutarlo
2º Tiene que ver algo con el codigo ASCII la aparicion de esos caracteres basura?
Desde ya muchas gracias.
Pd: Se que el resultado por pantalla me muestra perfecto al dejarlo al for como for(c='A';c<='Z' ;++c). Pero como digo me puse a jugar y encontre estas dudas que espero que me las aclaren. Saludos.
Atte. Patrici008
*/


15-Dec-2015 11:55
Invitado (Caranim)

for(c='A';c<='Z' ;--c)// aqui esta mi duda****
       {
       printf("%c",fgetc(F));
       }

1º Lo decrementa hasta donde? porque no me da bucle infinito al ejecutarlo

Lo decrementa mientras "c" sea menor que 'Z'. Como el char está declarado sin signo, "c" se irá decrementando en una unidad desde 65 ( el ASCII correspondiente a la "A" ) hasta -128 ( El valor más bajo que puede tomar un byte con signo ).  Al restar una unidad a -128 el valor que toma "c" es de 127 ( valor superior a 'Z', cuyo ASCII es el 90 ) lo que provoca el fin del bucle.

2º Tiene que ver algo con el codigo ASCII la aparicion de esos caracteres basura?

Esos caracteres se deben a que has guardado un fichero con una longitud determinada ( 26 caracteres ) pero en el bucle lees más de esa cantidad. Por ese motivo fgetc(F) devuelve basura, porqué ya has terminado de leer el fichero y accedes a "datos basura".

Espero haberte ayudado con algo.

Saludos.

Caranim.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)