Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com função bugando


frankxx

Pergunta

:angry: OBS: Tirei até a estrutura de repetição de dentro da função para demonstrar.

Quando colo a função dentro do int main () ela funciona normalmente , mas quando chamo ela através de outra função como o Menu() ela buga e pula a primeira entrada do nome da primeiro cidade. O Código tá imcompleto só tem a opção - 0 , só quero mostrar o erro em si. Agradeceria muito se algum de vocês conseguissem me ajudar.

#include <iostream>
#include <cstdlib>

using namespace std;

////////////////////////////////////////////////////

struct Cidade
{
    char Nome[11];
};

void AlocarNomes ( Cidade *Nomes )
{
    int a = 0;
    cout << " Digite O Nome Da Cidade Numero " << a + 1 << " -> ";
    cin.getline ( Nomes[a++].Nome , 11 , '\n');
    cout << " Digite O Nome Da Cidade Numero " << a + 1 << " -> ";
    cin.getline ( Nomes[a++].Nome , 11 , '\n');
    cout << " Digite O Nome Da Cidade Numero " << a + 1 << " -> ";
    cin.getline ( Nomes[a++].Nome , 11 , '\n');
    cout << " Digite O Nome Da Cidade Numero " << a + 1 << " -> ";
    cin.getline ( Nomes[a++].Nome , 11 , '\n');
    cout << " Digite O Nome Da Cidade Numero " << a + 1 << " -> ";
    cin.getline ( Nomes[a++].Nome , 11 , '\n');
}
///////////////////////////////////////////////////

void Menu ( Cidade *Nomes )
{
    cout << endl << " Digite 0 -> Para Adicionar Os Nomes Das 5 Cidades. ";
    cout << endl << " Digite 1 -> Para Adicionar As Distancias entre as 5 Cidades. ";
    cout << endl << " Digite 2 -> Para Verificar A Distancia Entre Duas Cidades. ";
    cout << endl << " Digite 3 -> Para Verificar Quais são As Duas Cidades Mais Proximas. ";
    cout << endl << " Digite 4 -> Para Ver A Tabela De Distancias Das Cidades. ";
    cout << endl << " Digite 5 -> Para Formular Um Percurso Entre As Cidades. ";
    cout << endl << " Digite 6 -> Para Sair. " << endl << endl;
    int n;
    cin >> n;
    switch (n)
    {
        case 0:
            AlocarNomes ( Nomes );
            Menu ( Nomes );
            break;
        default:
            system ("cls");
            cout << " Opcao Invalida - Por Favor Escolha Novamente " << endl << endl;
            Menu ( Nomes );
            break;
    }
}
////////////////////////////////////////////////////

int main()
{
    Cidade *Nomes = new Cidade [5];

    int a = 0;
    cout << " Digite O Nome Da Cidade Numero " << a + 1 << " -> ";
    cin.getline ( Nomes[a++].Nome , 11 , '\n');
    cout << " Digite O Nome Da Cidade Numero " << a + 1 << " -> ";
    cin.getline ( Nomes[a++].Nome , 11 , '\n');
    cout << " Digite O Nome Da Cidade Numero " << a + 1 << " -> ";
    cin.getline ( Nomes[a++].Nome , 11 , '\n');
    cout << " Digite O Nome Da Cidade Numero " << a + 1 << " -> ";
    cin.getline ( Nomes[a++].Nome , 11 , '\n');
    cout << " Digite O Nome Da Cidade Numero " << a + 1 << " -> ";
    cin.getline ( Nomes[a++].Nome , 11 , '\n');

    Menu ( Nomes );
    return 0;
}

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Isso acontece pois, após o cin >> n, resta uma quebra de linha no buffer de entrada. Assim, a próxima leitura recebe o \n como primeiro caracter e já retorna. Como foi retirado o \n que havia no buffer, a próxima leitura funciona normalmente.

Para resolver esse problema, coloque esse código após o cin:

while(getchar() != '\n');
Lembre-se de incluir o header stdio.h no projeto:
#include <stdio.h>

Abraços,

Marcelo Utikawa da Fonseca

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...