[C con Clase] X-files en c++

Juan jmicanovelles en gmail.com
Mie Oct 15 20:06:05 CEST 2008


Gracias Nork_M, estoy totalmente de acuerdo contigo, solo creí que mi respuesta era correcta a lo que preguntaba el que inicio el hilo.

>  Alguien sabe como puedo corregir el primer código sin añadir 
>  "scanf("%c", &caracter); //Leemos el ENTER"??? 

Esto es porque el chico que preguntaba había puesto 2 scanf, uno para eliminar el error que le daba, pero se ve que alguien de la lista se ha sentido ofendido con mi mensaje.

Te devo una, je je.

juan
















El pasado 2008-10-14 17:53:41, Nork_MG escribió:
 
N> El 14 de octubre de 2008 2:20, bameda <bameda en gmail.com> escribió:
N> > Hola listeros,
N> >
N> > tratando de enseñar C++ me ha pasado un caso muy extraño:
N> >
N> >
N> > ///codigo:
N> > include <stdio.h>
N> >
N> >
N> > int main(){
N> >    // Para controlar las iteraciones.
N> >    int i;
N> >    // Para contar el numero de vocales.
N> >    int vocales = 0;
N> >    // Para guardar los caracteres que se leen por teclado.
N> >    char caracter;
N> >
N> >    // Repetir 10  veces (desde que i = 0, mientras i < 10)
N> >    for (i = 0; i < 10; i++){
N> >        // Imprimir
N> >        printf("Introduzca el caracter %i:\t", i + 1);
N> >        // Leemos un caracter
N> >        scanf("%c", &caracter);
N> >
N> >        // si el caracter leido es a,e,i,o,u,A,E,I,O,U
N> >        if (caracter == 'a' || caracter == 'A' || caracter == 'e' ||
N> > caracter == 'E' || caracter == 'i' || caracter == 'I' || caracter ==
N> > 'o' || caracter == 'O' || caracter == 'u' || caracter == 'U'){
N> >            // Aumentamos en 1 el numero de vocales
N> >            vocales++;
N> >        } // fin if
N> >
N> >    } // fin for
N> >
N> >    // Imprimimos numero de vocales
N> >    printf("- Numero de Vocales: %i\n", vocales);
N> >    // Imprimimos numero de no vocales (10 - vocales)
N> >    printf("- Numero de Otros caracteres: %i\n", 10 - vocales);
N> >
N> > } // fin mains
N> mmmm bueno ... la solucion para tu problema es simple ... primero que nada
N> ... agregar el GATO "#" antes del include ... naaaaaaaa broma .... la
N> solucion es colocar fflush(stdin); .................. te lo explico ... como
N> alguien dijo anteriormente, no es recomendado, y es una muy mala practica,
N> el que recibas 2 caracteres, siendo estos el de entrada tuyo, y el otro el
N> ENTER, ya que cada vez que presiones enter tendras este problema ... y estar
N> gastando memoria en una variable ( para enter ) .. en la que no se deberia
N> gastar ... es realmente absurdo ....
N> Tu problema pasa por el caso de que se esta mandado 2 variables (  una letra
N> y un enter ), pero se esta reciviendo solo 1 ... la primera en este caso
N> .... y bueno ... esto provoca que el buffer de teclado se desalinie ... y
N> por consiguiente las dobles impresiones que sufres .... para solucionar
N> esto, solo basta poner el fflush(stdin); ( funcion pertenecionte al estandar
N> de C ), que eliminara ( no la almacenara ni reservara espacio en memoria...
N> ) cualquier entrada adicional que realices ... y que sobre de lo pedido ..
N> que en este caso es un solo caracter ...
N> Bueno ... espero haberme explicado con claridad .....
N> Sl2
N> >
N> >
N> > Este código da error:
N> > $ ./prueba
N> > Introduzca el caracter 1:       a
N> > Introduzca el caracter 2:       Introduzca el caracter 3:       e
N> > Introduzca el caracter 4:       Introduzca el caracter 5:       i
N> > Introduzca el caracter 6:       Introduzca el caracter 7:       o
N> > Introduzca el caracter 8:       Introduzca el caracter 9:       u
N> > Introduzca el caracter 10:      - Numero de Vocales: 5
N> > - Numero de Otros caracteres: 5
N> >
N> >
N> >
N> > en cambio
N> >
N> > ///codigo
N> > #include <stdio.h>
N> >
N> >
N> > int main(){
N> >    // Para controlar las iteraciones.
N> >    int i;
N> >    // Para contar el numero de vocales.
N> >    int vocales = 0;
N> >    // Para guardar los caracteres que se leen por teclado.
N> >    char caracter;
N> >
N> >    // Repetir 10  veces (desde que i = 0, mientras i < 10)
N> >    for (i = 0; i < 10; i++){
N> >        // Imprimir
N> >        printf("Introduzca el caracter %i:\t", i + 1);
N> >        // Leemos un caracter
N> >        scanf("%c", &caracter);
N> >
N> >        // si el caracter leido es a,e,i,o,u,A,E,I,O,U
N> >        if (caracter == 'a' || caracter == 'A' || caracter == 'e' ||
N> > caracter == 'E' || caracter == 'i' || caracter == 'I' || caracter ==
N> > 'o' || caracter == 'O' || caracter == 'u' || caracter == 'U'){
N> >            // Aumentamos en 1 el numero de vocales
N> >            vocales++;
N> >        } // fin if
N> >        scanf("%c", &caracter); //Leemos el ENTER
N> >    } // fin for
N> >
N> >    // Imprimimos numero de vocales
N> >    printf("- Numero de Vocales: %i\n", vocales);
N> >    // Imprimimos numero de no vocales (10 - vocales)
N> >    printf("- Numero de Otros caracteres: %i\n", 10 - vocales);
N> >
N> > } // fin main
N> >
N> > este no:
N> > $ ./prueba
N> > Introduzca el caracter 1:       a
N> > Introduzca el caracter 2:       e
N> > Introduzca el caracter 3:       i
N> > Introduzca el caracter 4:       o
N> > Introduzca el caracter 5:       u
N> > Introduzca el caracter 6:       q
N> > Introduzca el caracter 7:       q
N> > Introduzca el caracter 8:       q
N> > Introduzca el caracter 9:       q
N> > Introduzca el caracter 10:      q
N> > - Numero de Vocales: 5
N> > - Numero de Otros caracteres: 5
N> >
N> > Alguien sabe como puedo corregir el primer código sin añadir
N> > "scanf("%c", &caracter); //Leemos el ENTER"???
N> >
N> >
N> > Gracias
N> > ____________________________________________
N> > |
N> > |    David Barragán Merino
N> > |    E-mail: bameda en ARROBA@gmail.com
N> > |    Ingeniería Informática
N> > |    Universidad Carlos III Madrid
N> > |____________________________________________
N> > _______________________________________________
N> > Lista de correo Cconclase Cconclase en listas.conclase.net
N> > http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
N> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
N> >
N> -- 
N> Fabian Arenas L.
N> Estudiante de Ingeniería en Informática. UTEM
N> Web: http://eterniosilicio.blogspot.com/
N> Linux Registered User #476277 - http://counter.li.org/
N> Si nada te resulta.......Rutea el algoritmo po GIL!!!
N> _______________________________________________
N> Lista de correo Cconclase Cconclase en listas.conclase.net
N> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
N> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ


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