Jump to content
Fórum Script Brasil
  • 0

problema com getchar();


pigmeo

Question

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!

Edited by pigmeo
Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other sites

  • 0
Nem vou me dar ao trabalho de explicar porque não se deve utilizar fflush(stdin); isso é coisa de professores incompetentes que por ignorância ou, por falta de vergonha na cara e ensinam isso aos alunos.

Se quiser saber o porque acessem este link.

acho que intendi ^^ obrigado.

Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...