[C++] Problema de principiante

rDomingues

Power Member
Bom dia.

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.

#include <iostream>#include <cstring>
using namespace std;


int ledados (char tnome[][61], int lnome, unsigned int tdata[], int ldata, int MAX_PESSOAS)
{
int n;
cout << "Indique o numero de dados a introduzir, entre 1 e " << MAX_PESSOAS << " (inclusive): ";
cin >> n;

while (n<1 || n>MAX_PESSOAS)
{
cout << "Introduza um numero entre 1 e " << MAX_PESSOAS << ", inclusive: ";
cin >> n;
}
for (int i=0; i<n; i++)
{
cout << "Introduza o nome:\n";
cin.getline(tnome, sizeof(tnome));
cin.ignore();
cout << "Introduza o ano de nascimento:\n";
cin >> tdata;
cout << endl;
}
return n;
}


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 main()
{
int MAX_NOME = 61;
int MAX_PESSOAS = 30;
char nomes[MAX_PESSOAS][MAX_NOME];
unsigned int datas[MAX_PESSOAS];

mostra(nomes, MAX_PESSOAS, datas, MAX_PESSOAS, ledados(nomes, MAX_PESSOAS, datas, MAX_PESSOAS, MAX_PESSOAS));

return 0;
}
}
 
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:

int MAX_NOME = 61;
int MAX_PESSOAS = 30;
char nome[MAX_PESSOAS][MAX_NOME];
unsigned int datas[MAX_PESSOAS];


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:

int ledados(char auxnome[][int MAX_PESSOAS], int nlinhas, unsigned int auxdata[], int dlinhas ...

Ora, o que não está aqui correcto, alguem me sabe explicar?
 
Back
Topo