[C con Clase] Duda de novato con un bucle for
Martin Strahd
xaninverno en gmail.com
Mie Dic 22 20:05:47 CET 2010
Hola
Me llamo Xan y estoy empezando a programar en C y me ha surgido un pequeño
problema con un código de ejemplo de un manual con un bucle for anidado.
El código es el siguiente
*/*************************** Tabla de frecuencias de letras adyacentes en
un texto **********************/*
*#include <stdio.h>*
*#include <ctype.h>*
*#define DIM ('z'- 'a' + 1) /* filas/columnas de la tabla */*
*
*
*void main(void)*
*{*
* static int tabla[DIM][DIM]; /* Tabla de contingencias */*
* char f, c; /* índices */*
* char car; /* Carácter actual */*
* char carant; /* Carácter anterior*/*
*
*
* printf("Introducir texto. Para finalizar introducir la marca EOF\n\n");
*
* while ((car = getchar()) != EOF)*
* {*
* car = tolower(car); /* convertir a minúsculas si procede*/*
* if ((carant >= 'a' && carant <= 'z') && (car >= 'a' && carant <=
'z'))*
* tabla[carant-'a'][car - 'a']++;*
* carant = car;*
* }*
*
*
* /* Escribir tabla de frecuencias */*
* printf(" ");*
* for (c = 'a'; c<= 'z'; c++)*
* printf(" %c", c);*
* putchar ('\n');*
* for (f = 'a'; f<= 'z'; f++);*
* {*
* putchar(f);*
* for (c = 'a'; c<= 'z'; c++)*
* printf("%3d", tabla[f-'a'][c - 'a']);*
* putchar('\n');*
* }*
* fflush(stdin);*
* printf ("Pulsa <Enter> para salir...");*
* while (getchar() != '\n');*
El problema reside en el doble bucle for:
*for (f = 'a'; f<= 'z'; f++);*
* {*
* putchar(f);*
* for (c = 'a'; c<= 'z'; c++)*
* printf("%3d", tabla[f-'a'][c - 'a']);*
* putchar('\n');*
* }*
Depurando el programa y observando las variables f comienza con el valor 123
('}') cuando debería empezar con el 97 ('a'). Lo curioso es que en el bucle
de la variable c, que es idéntico, se ejecuta correctamente, tomando c los
valores del 97 al 122 ('a' a 'z').
He cambiado el nombre a la variable, probar con valores numéricos en vez de
caracteres, incluso he probado a realizar el bucle for con un int y asignar
el valor después a la variable f, así
*for (i = 97; i<= 122; i++);*
* {*
* f = i;*
* putchar(f);*
* for (c = 'a'; c<= 'z'; c++)*
* printf("%3d", tabla[f-'a'][c - 'a']);*
* putchar('\n');*
* }*
*
*
pero siempre empieza asignando el valor 123 (que es justo el siguiente con
el que acaba el primer bucle for. Y lo que más me despista es que los dos
bucles for para la variable c se ejecutan sin ningún problema (se empieza
con el valor 'a' y acaba con el valor 'z'). He probado con Code::Blocks y
DevC++, por si fuera una cuestión del compilador y tambien pasa igual.
Si alguien puede echarme una mano me sería muy útil, pues no veo dónde puede
estar el fallo.
Muchas Gracias
Xan bellón
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20101222/b18a203e/attachment.html>
Más información sobre la lista de distribución Cconclase