[C con Clase] Detectar errores con scanf

David Romero Escalona solidsnakemgs9 en hotmail.com
Dom Mar 4 15:14:35 CET 2007


Hola,

Tengo un problema para detectar un error al leer de la entrada estándar con 
la función scanf de la biblioteca estándar de C. Esta función devuelve el 
número de items que ha podido leer satisfactoriamente de la entrada 
estándar. Entonces, si quieres leer n items, puedes detectar que ha ocurrido 
algún error si el número devuelto por la función es distinto de n.
En mi caso, cuando detecto el error, vuelvo a pedir al usuario que 
introduzca el valor. Pero la segunda vez que se invoca scanf ésta no lee 
bien de la entrada estándar y mi programa entra en un bucle infinito.
Mi programa es este:

#include <stdio.h>

int main ()
{
    int n, i, nItems;
    double suma;

    do {
        printf ("Escribe el valor de n: ");
        nItems = scanf ("%d", &n);
        printf ("Número de items: %d\n", nItems);
        if (nItems != 1)
            printf ("Error. El valor de n tiene que ser un entero\n\n");
    }
    while (nItems != 1);

    suma = 0.0;
    for (i = 1; i <= n; i++)
        suma = suma + ((i * i + 1) / i);

    printf ("La %d-ésima suma parcial es: %g\n", n, suma);
    return 0;
}

El problema es que si introduzco algún valor erróneo, todas las veces que se 
llama a scanf depués no me dejan introducir otro valor sino que scanf 
directamente no lee nada.
¿alguien sabe porqué ocurre ésto?

Muchas gracias.

_________________________________________________________________
Moda para esta temporada. Ponte al día de todas las tendencias. 
http://www.msn.es/Mujer/moda/default.asp





Más información sobre la lista de distribución Cconclase