Erro cin.ignore()

1. Erro cin.ignore()

Augusto
LinuxMH

(usa BackTrack)

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 ?


  


2. Re: Erro cin.ignore()

Uilian Ries
uilianries

(usa Linux Mint)

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

A função ignore está capturando o cin e descartando o primeiro caracter.

Por default, o ignore descarta 1 caracter, mas você poderia descartar N caracteres com ela.

http://www.cplusplus.com/reference/istream/istream/ignore/


3. Re: Erro cin.ignore()

Augusto
LinuxMH

(usa BackTrack)

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()

Uilian Ries
uilianries

(usa Linux Mint)

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()

Augusto
LinuxMH

(usa BackTrack)

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()

Uilian Ries
uilianries

(usa Linux Mint)

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()

Augusto
LinuxMH

(usa BackTrack)

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()

Uilian Ries
uilianries

(usa Linux Mint)

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 ....






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts