Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Lotharsan

#1
Muchas gracias por las respuestas.... me han servido de mucho.
Aunque ahora me ha quedado la duda de porqué una función como scanf or getchar no se hicieron ya contemplando esta situación en la que leen datos residuales o símplemente no se les añadió la opción de eliminar datos residuales después de haber leido la información, aunque eso no se pensara en el momento de la creación de estas funciones ¿no han pasado ya años como para haberse corregido o creado una forma mejor de introducir la información sin que se produzcan estos casos?
#2
/* Programa que calcula el tiempo de conducción dada la distancia y la velocidad media.
Utiliza un bucle cuando se le pregunte al usuario si quiere repetirlo y conteste que sí usando un bucle while. */

#include "stdio.h"

main()
{
    int e, v;
    char r='s';

    while(r=='s')
    {
        printf("Introduce la distancia recorrida: ");
        scanf("%d", &e);
        printf("Introduce la velocidad media: ");
        scanf("%d", &v);
        printf("El tiempo invertido ha sido %d\n", v/e);
        printf("¿quieres repetirlo? ");
        r=getchar();
    }
}

----------------------------------------------------------

Lo ejecuto tanto en Ubuntu como con un compilador en Android (c4droid). El resultado siempre es el mismo, no me leer el último getchar y por tanto el while no se ejecuta.
En la mayoría de libros hacen referencia a conio.h, librería no standar de Borland. Yo por supuesto quiero realizar la tarea de leer un caracter desde el teclado de forma standar a todos los compiladores, pero no me funciona. ¿cuál es la forma correcta para leer un caracter desde teclado? También he intentado incluso usar un scanf("%c", &r)..... sin mayor éxito.
#3
Muchas gracias por la información.... voy a probarlo...
#4
Hola,
Gracias por la respuesta....
No es una solución óptima, pero sabiendo que no es correcto pero permitiendome seguir con los ejercicios, he optado por realizar lo que me has aconsejado, vaciando el buffer y poniendo un segundo getchar().... de esta forma sí que realiza los pasos a seguir...

No sé si será por el compilador usado en el sistema que uso, aunque sospecho que los tiros van por ahí....

Gracias de todas formas, con esto puedo continuar.
#5
Gracias por la respuesta.... en cuanto al #include, en el libro que menciono viene explicado que puedo introducir la libreria entre comillas como me indicas, y el compilador me lo acepta sin problemas.
De todas formas he probado tu opción y el resultado no varía.... sigue pasando lo mismo después de añadir el fflush(stdin); que como ya había mencionado
Citarbuscando en google encontré como limpiar el buffer antes del getchar... pero que si quieres arroz Catalina.... el programa hace exáctamente lo mismo....
incluso después del getchar(), sigue dando el mismo resultado nefasto.... no entiendo porqué realiza ese salto a cada repetición.

y en cuanto al segundo programa.... tienes toda la razón... muchas gracias.

Me sigue quedando la duda del primer programa. Agradezco cualquier consejo.
#6
Estoy empezando con C, siguiendo el libro "Guia de autoenseñanza" de Herbert Schildt con Code::Blocks en Ubuntu 11.10.

Realizo los ejercicios del libro y empiezo teniendo problemas con las librerias, como conio.h, la cual he encontrado en google que puedo sustituir con ncurses.h...

Cuando realizo un simple programa y en el libro usan getche() yo uso getchar();
pero he aquí mis problemas...

en un programa simple como:

/* Programa que lee diez letras. Después de que haya leído las letras, muestra la que está en primer lugar en el alfabeto (la que tiene menor valor) de las introducidas. */

#include "stdio.h"

main()
{
    char ch, menor='z';
    int i;

    for(i=1; i<11; i++)
    {
       printf("Introduce la letra número %d: ", i);
       ch = getchar();
       if(ch<menor) menor=ch;
    }

    printf("La letra de menor valor introducida ha sido %c", menor);
}



Diréctamente me salta siempre un getchar(), haciendo solo la 1ª, 3ª... y llenando con un espacio en blanco ch en la 2ª, 4ª....

buscando en google encontré como limpiar el buffer antes del getchar... pero que si quieres arroz Catalina.... el programa hace exáctamente lo mismo....

No queriendo estancarme horas buscando un porqué sigo con el siguiente ejercicio:


/* Programa que alcula el área de un círculo, rectángulo o triángulo utilizando una escalera if-else-if */

#include "stdio.h"

main()
{
    int b, a;
    float r;
    char op;

    printf("¿qué área quieres calcular? Rectángulo, Triángulo o Círculo: ");
    fflush(stdin);
    op = getchar();

    if(op=='R'||'r')
    {
        printf("Introduce la base: ");
        scanf("%d", &b);
        printf("Introduce la altura: ");
        scanf("%d", &a);
        printf("El área del rectángulo es: %d", b*a);
    }
    else if(op=='T'||'t')
        {
            printf("Introduce la base: ");
            scanf("%d", &b);
            printf("Introduce la altura: ");
            scanf("%d", &a);
            printf("El área del triángulo es: %d", (b*a)/2);
        }
        else if(op=='C'||'c')
            {
                printf("Introduce el radio: ");
                scanf("%f", &r);
                printf("El área del círculo es: %f", 3.141592*r*r);
            }

}



y he aquí que el programa decide que da igual si a la hora de introducir un caracter por teclado le introduces una T, una C..... porque solo realiza el primer if...

¿dónde está todo el problema este de lidiar con este editor, o sistema o son las funciones, compilador, librerias.....? ya me lo empiezo a plantear todo....

¿alguna ayuda?