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ú

Temas - Lotharsan

#1
/* 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.
#2
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?