Jump to content
Fórum Script Brasil
  • 0

Ajuda com função bugando


frankxx

Question

: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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.6k
×
×
  • Create New...