Ir para conteúdo
Fórum Script Brasil
  • 0

problema com getchar();


pigmeo

Pergunta

Bom galera, sou inciante no assunto (MUITO INICIANTE VAI DAR PRA TER UMA IDEIA PELO MEU CÓDIGO KKKK) estou estudando com uma apostila que encontrei na internet pra download, estou aprendendo bastante porém em um dos exercícios me deparei com um erro, li que o comando getchar(); "mantem o programa aberto" mas quando coloco ele no meu código, o programa continua fechando (abre executa e logo em seguida fecha) já tentei trocar de lugar o comando mais não obtive exito, o programa é para encontrar um numero da sequencia Fibonacci dependendo do valor que é fornecido pelo usuário, (ex: usuário poe 5, o programa encontra o 5º numero da sequencia Fibonacci, usuário poe 7, encontra o 7º numero da sequencia...) pelo que intendi é usado o sistema de recurção nesse programa, que serve para uma função chamar a si mesma (me corrijam se eu estiver errado por favor), quero saber se seria correto usar o comando getchar(); e onde seria correto usa-lo, segue o código:

#include <iostream.h>
int fibo(int i);
int main()
{
    int n, resp;
    cout << "Digite um numero + <enter>: ";
    cin >> n;
    resp = fibo(n);
    cout << "\nElemento " << n << " na serie Fibonacci = " << resp;
    return 0;
}
int fibo(int i)
{
    cout << "\nProcessando fibo(" << i << ")...";
    if(i < 3)
    {
         cout << "Retornando 1...\n";
         return 1;
    }
    else
    {
        cout << "Chamando fibo(" << i - 2 << ") e fibo (" << i - 1 << ").\n";
        return(fibo(i - 2) + fibo(i - 1));
    }
}

Vlw!

Esqueci de uma coisa, a respeito de strings, na apostila tem alguns exercicios mas quando eu tento o dev c++ que é o programa que eu uso, não reconhece!

Editado por pigmeo
Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

No caso do getchar() seria logo apos a linha

cout << "\nElemento " << n << " na serie Fibonacci = " << resp;

mas não entendi o porque de o programa não esperar... o que pode estar ocorrendo é que o buffer do stdin está "guardando"o ultimo "enter" que você pressionou.. e quando chega no getchar() ele já descarrega o "enter" uma opcao é colocar assim

cout << "\nElemento " << n << " na serie Fibonacci = " << resp;
fflush(stdin);
getchar();
ou voce também pode colocar (outra alternativa)
cout << "\nElemento " << n << " na serie Fibonacci = " << resp;
system("pause");

veja se funciona...

abraco

Link para o comentário
Compartilhar em outros sites

  • 0

 cout << "\nElemento " << n << " na serie Fibonacci = " << resp;

fflush(stdin);

getchar(); [\code]

tentei só com o getchar(); não deu, ai coloquei o outro comando em cima deu certinho, voce poderia me explicar oque exatamente faz esse comando fflsuh? obrigado pela ajuda^^

Link para o comentário
Compartilhar em outros sites

  • 0

Bom se existem pessoas que não tem paciencia de explicar no forum... eu tenho

Então Pigmeo, devido a um erro na funcao getchar(), scanf(), gets(), muitas vezes ela capitura o "enter" que você pressiona quando termina de digitar um dado no prompt.... e isto torna necessário a utilizacao da funcao fflush() que nada mais é, que uma funcao que limpa o buffer de um arquivo... e no caso o "arquivo"que queremos limpar o buffer é o stdin que nada mais é o que o metodo de entrada do teclado. portanto fflush(stdin) no caso se voce utilizar o linux a mesma não funciona... então voce precisa utilizar o __fpurge(stdin)...(isto mesmo com dois underlines antes do nome da fucao)

PS: por experiencia propria

scanf("%c%*c", &cont); //note a mudança aqui!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

não funciona em todos os casos, principalmente para quem utiliza LINUX

Abraco

Uma boa alternativa é utilizar o cin do c++

que não possui estes bugs

Link para o comentário
Compartilhar em outros sites

  • 0
Bom se existem pessoas que não tem paciencia de explicar no forum... eu tenho

Então Pigmeo, devido a um erro na funcao getchar(), scanf(), gets(), muitas vezes ela capitura o "enter" que você pressiona quando termina de digitar um dado no prompt.... e isto torna necessário a utilizacao da funcao fflush() que nada mais é, que uma funcao que limpa o buffer de um arquivo... e no caso o "arquivo"que queremos limpar o buffer é o stdin que nada mais é o que o metodo de entrada do teclado. portanto fflush(stdin) no caso se voce utilizar o linux a mesma não funciona... então voce precisa utilizar o __fpurge(stdin)...(isto mesmo com dois underlines antes do nome da fucao)

PS: por experiencia propria

scanf("%c%*c", &cont); //note a mudança aqui!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

não funciona em todos os casos, principalmente para quem utiliza LINUX

Abraco

Uma boa alternativa é utilizar o cin do c++

que não possui estes bugs

Muito obrigado cara, entendi perfeitamente o uso do fflush(stdin) vlw mesmo ^^

Link para o comentário
Compartilhar em outros sites

  • 0

Não é questão de paciência é que eu não me propus a explicar mesmo, o link que indiquei tinha as informações necessárias.

Segundo eu não quis rebaixar os estudantes e sim os professores. Um estudante errar é perfeitamente normal afinal ele esta aprendendo, agora um professor que esta ali para ensinar ai não dá, não concorda?

O '\n' que fica no buffer não é um bug é normal o que não é lido deve continuar no buffer, não devemos distorcer os fatos.

Quanto ao fflush os autores mesmo falam que o resultado quando usado com buffers de entrada é indefinido quem somos nós para discordar.

Realmente utilizar o cin do C++ é o ideal quando se esta programando em C++.

Não vale a pena discutir sobre isso, o importante é ajudar quando alguém tem duvidas e corrigir quando alguém erra.

Link para o comentário
Compartilhar em outros sites

  • 0

é... Só gostaria de entender quando uma pessoa deixa de ser aluno para virar professor, pois todo professor por melhor se seja sempre também será aluno. E não acredito que deva ser criticado tão rudemente por algum suposto erro.

Acredito que todos tem seus fatos para acreditar qual método funciona.. só que

scanf("%c%*c", &cont);

não funciona quando aprender um metodo que funcione e não seja fflush(), melhor! Por enquanto (e já faz um bom tempo) o utilizo e nunca fugiu do meu esperado, nenhum resultado além do meu desejo.

De qualquer forma obrigado pelo esclarecimento a respeito do fflush() até então nunca havia escutado criticas a respeito dela.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...