Foros del Web » Programación para mayores de 30 ;) » C/C++ »

duda con muestra por pantalla C

Estas en el tema de duda con muestra por pantalla C en el foro de C/C++ en Foros del Web. 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> ...
  #1 (permalink)  
Antiguo 10/12/2015, 13:47
 
Fecha de Ingreso: diciembre-2015
Mensajes: 1
Antigüedad: 8 años, 4 meses
Puntos: 0
Pregunta duda con muestra por pantalla C

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. Patricio.
*/
  #2 (permalink)  
Antiguo 11/12/2015, 00:28
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: duda con muestra por pantalla C

Código C:
Ver original
  1. for(c='A';c<='Z' ;--c)

Este bucle se repite mientras que C sea menor o igual que 'Z', eso sí, en cada iteración estás decrementando c. El tipo char es con signo, esto quiere decir que tiene 255 valores positivos, el 0 y 256 valores negativos. Si miras la tabla ASCII verás que los primeros caracteres de la tabla no son imprimibles. Y que pasa con los negativos? Si has visto cómo se almacenan los números en la memoria entenderás que un mismo binario se puede interpretar de diferentes maneras (con signo, sin el, con mantisa y exponente, BCD, ...). El programa va a buscar un carácter a mostrar y dado que las tablas no tienen valores negativos, convertirá el número en unsigned. Cuando C alcance el valor -256 y le toque decrementarse pasará a valer 255, pasará a ser mayor que 'Z' y te saldrás del bucle.

El bucle no es infinito simplemente porque en algún momento se deja de cumplir la condición necesaria para repetirse.

Si lo que quieres es que el bucle vaya de Z a A tienes que dejarlo así
Código C:
Ver original
  1. for(c='Z';c>='A' ;--c)

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.

Etiquetas: char, int, muestra, pantalla, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:45.