[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