Ir ao conteúdo

Ajuda::Bug ou codigo mal escrito?


GusMC

Posts recomendados

Postado

Saudações caros amigos, venho postar aqui um código esperava que me ajudassem ou me tentassem explicar.

Experimentem no fim por so com 1 cin.get(); e não dois, o programa "come-me" o código, não executa a ultima linha! Mas se meter 2, assim já corre.

Conseguem me explicar porquê?

Abraço

#include <iostream>

using namespace std;

int main (int argc, char* argv)

{

int i=123;

double f=1234.567;

char ch[80]="Bom dia\n", rep;

cout << "i=" << i << endl;

cout << "f=" << f << '\n';

cout << "ch?" << ch << '\n';

cout << "i = ? ";

cin >> i; //leitura de um número inteiro

cout << i << '\n';

cout << "f = ?";

cin >> f; //leitura de um número real

cout << f << '\n';

cout << "rep = ? ";

cin >> rep; //leitura de um caracter

cout << rep<< '\n';

cout << "ch = ? ";

cout << "ch= " << ch; //é esta a primeira palavra...

cin.get();

cin.get(); // duvida para tirar, porque usar 2 cin.get()?

return 0;

}

Postado

Quando você usa o comando "cin >> rep" pra pegar um char, você digita um char e <enter>. O caractere vai pra variável rep, mas o <enter> (que também vale como um char) continua no buffer.

Então é como se o primeiro cin.get() recebesse esse 'enter' automaticamente, enquanto o segundo cin.get() espera você digitar algo (pois o buffer tá limpo).

Você pode usar cin.ignore() pra descartar esse \n, mas no final das contas o efeito é o mesmo que o cin.get(), então tanto faz.


#include <iostream>
using namespace std;

int main () {
char rep;

[COLOR="Blue"]//Buffer do cin = [][/COLOR]

cout << "rep = ? ";
cin >> rep;

//usuario digita: A + <enter>
[COLOR="Blue"] //Buffer do cin = [A, <enter>][/COLOR]
//rep recebe o proximo char do buffer --> A
[COLOR="Blue"] //Buffer do cin = [<enter>][/COLOR]

cout << rep << endl;

cin.get();
//cin.get() recebe proximo char do buffer --> <enter>
[COLOR="Blue"] //Buffer do cin = [][/COLOR]

cin.get();
//Buffer vazio, espera o usuário digitar algo
return 0;
}

Postado

Eu ja tentei limpar o buffer, ja meti o flush por aí a cima e acontece o mesmo! Esqueci de dizer no outro post! Mesmo limpando o buffer acontece-me o mesmo!

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!