Problema con C en Linux

Wenas.

Tengo que hacer unos programas en C (suerte que me dan el pseudocodigo, asi no tengo que pensarlos mucho xD) y tengo un problema que no consigo solucionar.

Os pongo el codigo:

#include <stdio.h>

int main(void)
{
        const char blanco = ' ';
        char caracter;
        int altura, i, j;

        printf("Introduzca un caracter: ");
        scanf("%c", &caracter);
        fflush(stdin);
        printf("Introduzca la altura de la figura: ");
        scanf("%d", &altura);

        printf("\n\nFIGURA:\n\n");

        for(i = 1; i <= altura; i++)
        {
                for(j = 1; j <= (altura-i); j++)
                        printf("%c", blanco);
                for(j = 1; j <= i; j++)
                        printf("%c", caracter);

                printf("\n");
        }

        for(i = 1; i <= (altura-1); i++)
        {
                for(j = 1; j <= i; j++)
                        printf("%c", blanco);
                for(j = 1; j <= (altura-i); j++)
                        printf("%c", caracter);

                printf("\n");
        }

        printf("\n\nPulse INTRO para continuar...\n\n");
        fflush(stdin);
        getchar();

        return 0;
}


Pues el getchar() del final no funciona. No espera a que pulse un caracter. Tengo que poner dos getchar() para que funcione.

¿Donde esta el problema?

Gracias ;)
Este... hacindo memoria...

_fpurge(stdin)

antes del getchar... creo que es lo que hacía en primero cuando no funcionaba el fflush(stdin).

Es simplemente porque se te come los saltos de linea...
setbuf(stdin, 0);


Y dejarse de chapuzas no portables / no estándar.

- ferdy
Ferdy escribió:
setbuf(stdin, 0);


Y dejarse de chapuzas no portables / no estándar.

- ferdy


[tadoramo] [tadoramo] [tadoramo] [tadoramo] [tadoramo] [tadoramo]

Ya funciona xD
Ferdy escribió:setbuf(stdin, 0);
Y dejarse de chapuzas no portables / no estándar.


Con todo respeto y sin ánimo de controversia (ni de lucro)

En el tema que se trata :

__fpurge(stdin)
no es estandard, y no es portable, pero NO ES CHAPUZA.
aunque reconozco que el programa queda CHAPUZERO.




setbuf(stdin,0)

es estandard, es portable, pero ES CHAPUZA.
Es utilizar un cambio de asignacion de buffer para borrar el buffer original, realmente ingenioso.


Suerte.
no es estandard, y no es portable, pero NO ES CHAPUZA


Si no es estándar y no es portable, es una chapuza. Period.

- ferdy

------

Beh... no entendí el problema, si setbuf ayuda es por lo que ha comentado altair1.

- ferdy
5 respuestas