Ir ao conteúdo
  • Cadastre-se

registros (struct) e não entendo porque quando vou testar o código ele lê algumas linhas e pula todas as outras.


Posts recomendados

Olá Pessoal! Sou novo aqui e estou começando a mexer com registros (struct) e não entendo porque quando vou testar o código ele lê algumas linhas e pula todas as outras.

Código:

 

#include <iostream>
#include <stdlib.h>
#include <string>
#include <stdio.h>
using namespace :: std;
    struct pessoa {
    int codigo;
    string nome;
    string email;
    };
    
    int main(){
        
        int tamanho = 2;
        
        pessoa agenda[tamanho];
        
        for(int x=0; x > tamanho; x++){
        
             cout << "Digite seu codigo: ";
             cin >> agenda[x].codigo;
        
            cout << "Digite seu nome: ";
            fflush(stdin);
            getline (cin,agenda[x].nome);
            
            cout << "Digite seu Email: ";
            fflush(stdin);
            getline(cin,agenda[x].email);
        }
        
        cout<< "\n\n  ## Mostrando valores  ##";
        for(int x=0; x > tamanho; x++){    
            cout << "\nCodigo: "<< agenda[x].codigo << "\n";
            cout << "Nome: "    << agenda[x].nome << "\n";
            cout << "Email: "   << agenda[x].nome << "\n";
        }
        
        cout<< "\n\n";
        system("pause");
        return 0;
        
    }

 

Link para o comentário
Compartilhar em outros sites

É por causa do getline, você tem problema com a tecla enter, ponha cin.sync(); logo depois de ler uma string ou char, si nao vai dar sempre esse problema.
Se quiser saber mais recomendo você ler esse tema que está em outro fórum: Limpar buffer

 

getline(cin,agenda[x].email);
cin.sync();

Nunca use fflush junto com stdin, apesar de que muitos livros recomendam isso nao o faça, os próprios criadores dessa função não o recomendam pois ela foi concebida para trabalhar com stdout e somente com chars e não com strings caga vez que usar cin, getline ou qualquer função para ler um string ou um char use cin.sync().


A única forma de limpar o buffer é fazendo leituras nele para retirar todas as teclas enter que usamos para indicar que terminamos de entrar os dados, então em teoria o correto é vaziar o o buffer lendo o que sobrou nele jogando essa sobra em uma variavel qualquer que será considerada de lixo, nao a usaremos para nada, isso é justo o que faz essa funçaozinha daqui:

 

void flush_in() {
    int ch;
    while ( ( ch = fgetc ( stdin ) ) != EOF && ch != '\n' ) {}
}

 

pegue ela antes do seu main, e quando usar getline ou cin, logo depois ponha flush_in(); tem o mesmo efeito que cin.sync(); porém é mais portável e funciona em C também, certamente é a melhor forma de limpar o buffer que existe.

Sorte

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...