Pular para o conteúdo

Erro cin.ignore()

Responder tópico
  • Denunciar
  • Indicar

1. Erro cin.ignore()

Enviado em 23/06/2013 - 10:30h

Ola,
bom estou aprendendo a programar em c++, e eu uso o scanf e printf ( sei que é do c) por ter um complexidade melhor, mais hoje fui tentar limpar buffer do cin, e ele "come" a primeira letra,
 #include <iostream>
#include <string>
using namespace std;
main()
{
string a, b;
getline(cin,a);
cin.ignore();
getline(cin,b);
cout <<a<<endl;
cout <<b;
}

A primeira letra da variável b é tirada, por que ?

Responder tópico

3. Re: Erro cin.ignore()

Enviado em 23/06/2013 - 10:57h

Tipo usei isso
#include <iostream>
using namespace std;

int main () {
char last[20], first[20];
cin.getline(first,20);
cin.ignore(20,'\n');

cin.getline(last, 10);

cout << "===== " << first <<endl<< last << '\n';

return 1;
}

mais quando eu digito a primeira palavra e dou enter, eu preciso dar enter denovo para digitar a segunda palavra, por que ?

4. Re: Erro cin.ignore()

Enviado em 23/06/2013 - 11:08h

No caminho feliz:
O primeiro nome é armazena do em first:
cin.getline(first,20);
Quando é pressionado enter ('\n'), o getline retorna e segue para o próximo comando

Seguido entra o ignore, que aguarda stdin, ignorando ou os primeiros 20 caracteres ou '\n'
cin.ignore(20,'\n');

Quando é pressionado enter ('\n'), o ignore retorna e segue para o próximo comando

O último nome capturado é armazenado em last
cin.getline(last, 10);

Se eu digitasse:
Joao
Carlos
Santos

Minha saída seria:
===== Joao
Santos

Essa quebra de linha que há entre Joao e Santos, na saída, está pelo endl inserido:
cout << "===== " << first <<endl<< last << '\n';

5. Re: Erro cin.ignore()

Enviado em 23/06/2013 - 11:39h

Sim, tipo eu queria que não precisa-se da enter, igual exemplo
Digita-se
Joao
Fernando
Henrique

queria que aparece-se Joao
Fernando
e não
Joao
Henrique

6. Re: Erro cin.ignore()

Enviado em 23/06/2013 - 12:41h

Então ignore a última entrada e não a do meio...

Para o caso de não dar enter, verifique a estrutura termios, utilizando o parametro não canonical

Isso já foi visto aqui no VOL, segue o link da rotina para capturar sem utilizar enter:

http://www.vivaolinux.com.br/topico/C-C++/kbhit()-no-linux

7. Re: Erro cin.ignore()

Enviado em 23/06/2013 - 13:07h

A página que você procura não foi encontrada.

Procure pelo documento desejado no formulário de busca presente no cabeçalho do site ou entre em contato com suporte@vivaolinux.com.br.

8. Re: Erro cin.ignore()

Enviado em 23/06/2013 - 13:30h

Precisa copiar o link e colar.

Perceba que o link não pegar todo o corpo da string ....

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder