getchar

AquaFight

Power Member
ola.
estou neste momento a 'reaprender' C mas estou a ter um problema que, quando inicialmente comecei a programar, não tive, uma vez que corria sempre os programas ou em linux ou no cygwin (emulador de linux).
estou a fazer pequenos exercícios básicos (tipo contar o número de vezes que uma certa letra aparece num input, esse tipo de coisas). o problema é este: quero fazer, por exemplo, um programa que conte caracteres ou algo do género e uso o getchar() num ciclo. era suposto, ao carregar no enter, o programa processar o que quer eu tenha escrito mas ele simplesmente faz um parágrafo novo.
talvez se usar o scanf isto não aconteça (ou se ler de um ficheiro ou de uma string claro) mas gostava de saber porque é que, com certos programas, ao carregar no enter ele lê o que já escrevi e noutros aparece um paragrafo novo.
 
Penso que tem a ver com o facto de o buffer ainda conter alguns caracteres aquando da execução do getchar(), mas deixa aí um bocado de código para confirmar se é isso.
 
esté é um dos programas que nao posso testar por causa disso:


Código:
#include <stdio.h>
#define IN 1
#define OUT 0


int main () {

    int nword[15];
    int state = OUT;
    int i, j;
    char c;


    for(i = 0; i <= 15; ++i)
        nword[i]=0;


    while((c = getchar()) != EOF)
    {
        if(c == ' ' || c == '\t')
        {
            if (state == IN)
            {
                ++nword[i];
                i = 0;
            }
            state = OUT;
        }
        else
        {
            ++i;
            state = OUT;
        }
    }

    for(i = 0; i <= 15; ++i)
    {
        printf("Palavras de %d letras: ", i);
        for(j = 0; j <= nword[i]; ++j)
            printf(" *");
        printf(" = %d", nword[i]);
    }

    return 0;
}

é natural que tenha erros porque nao pude testar. de qualquer forma deve dar para perceber porque é que não dá.
 
O problema aqui é que estás a usar o getchar() para ler caracteres até que o caracter lido seja EOF, o que nunca vai acontecer porque não estás a processar ficheiros.
 
Back
Topo