[C++] Problema de principiante | ZWAME Fórum
[C++] Problema de principiante
Discussão em 'Programação' iniciada por rDomingues, 30 de Novembro de 2012. (Respostas: 5; Visualizações: 947)
Ora bem, tenho um TPC de programação que consiste em escrever um programa para armazenar 2 tabelas de dados introduzidos pelo utilizador (nome [com um maximo de 60 caracteres] e ano de nascimento), utilizando duas funções, uma para a elaboração das tabelas e outra para a sua visualização.
Ora, eu escrevi o codigo abaixo, mas não sei bem como declarar as tabelas na função, pelo que gostava que alguem mais entendido me explicasse como o fazer...
int ledados (char tnome[][61], int lnome, unsigned int tdata[], int ldata, int MAX_PESSOAS)
Se não estou em erro, para declarar uma tabela multidimensional, necessito de definir o que esta acima a bold, mas no local do 61 queria utilizar uma variavel "MAX_NOME", mas não sei como a declarar.
Utilizando o codigo acima, ao compilar tenho erros ao utilizar a função, na linha:
mostra(nomes, MAX_PESSOAS, datas, MAX_PESSOAS, ledados(nomes, MAX_PESSOAS, datas, MAX_PESSOAS, MAX_PESSOAS));
cannot convert `char (*)[((unsigned int)((int)MAX_NOME))]' to `char (*)[61]' for argument `1' to `int ledados(char (*)[61], int, unsigned int*, int, int)'
Provavelmente porque estou a fazer para ali uma salganhada.
Enfim, fica o codigo, se alguma alma caridosa me quiser ajudar, fico agradecido.
cout << "Indique o numero de dados a introduzir, entre 1 e " << MAX_PESSOAS << " (inclusive): ";
while (n<1 || n>MAX_PESSOAS)
cout << "Introduza um numero entre 1 e " << MAX_PESSOAS << ", inclusive: ";
cout << "Introduza o nome:\n";
cin.getline(tnome, sizeof(tnome));
cout << "Introduza o ano de nascimento:\n";
cin >> tdata;
void mostra (char tnome[][61], int lnome, unsigned int tdata[], int ldata, int nsaidas)
for (int i=0; i<nsaidas; i++)
cout << tnome << " " << tdata << endl;
int MAX_NOME = 61;
int MAX_PESSOAS = 30;
char nomes[MAX_PESSOAS][MAX_NOME];
unsigned int datas[MAX_PESSOAS];
Por partes, sem ter visto com grande pormenor o que estiveste a fazer:
-Nas funções tens uma variável ldata que nunca usas, portanto era de considerar tirares.
-É um pormenor mas: já que estás em C++, porque não usas strings em vez de arrays de chars? (depois podias fazer string.size() para validar o comprimento, como isso está ficas com nomes maiores que o limite cortados - mais info em http://www.cplusplus.com/reference/string/string/).
Antes de continuar, já falaste/queres saber/é suposto saberes o que são structs?
Desculpa não poder ver o erro em específico agora e ter-me ficado pelos pormenores, com mais tempo vejo isso, masde qualquer maneira alguém te vai ajudar mais cedo, for sure
Tenho instruções especificas para utilizar tabelas de caracteres em C. Structs ainda não dei, deve estar para chegar.
A variavel ldata não é necessária para passar a tabela para a função?
Vê como funcionam os apontadores. Não se usam vectores assim.
Passando um apontador do vector para a função não te tens de preocupar com tamanhos.
Mas para a resolução deste problema, não posso usar Ponteiros (supostamente ainda não os dei).
Ora eu vou explicar o que estou a tentar fazer.
Basicamente projectei uma função para pedir ao utilizador nomes completos e anos de nascimentos (de pessoas diferentes) e guardar esses dados retornando o numero de dados (ou de pessoas) introduzidas na função.
Ora para isso projectei uma função, que irá introduzir esses dados em 2 tabelas (uma bi-dimensional para as strings e outra uni-dimensional para os anos), previamente declaradas (fora da função) e sem qualquer dado, sendo elas:
char nome[MAX_PESSOAS][MAX_NOME];
MAX_PESSOAS = Numero maximo de indivios a serem introduzidos
MAX_NOME = Numero maximo de letras em cada nome
Ora o meu problema é passar isto para a função. Segundo os pdf's que foram disponibilizados faria-se assim: