Jump to content

[Duvida] Structs - Resolvido


Strabush
 Share

Recommended Posts

Boa tarde.

Bem, estou com uma dúvida acerca de estruturas e tipos de estrutura.

Basicamente o programa faz o seguinte, adiciona um nome á struct, struct esta pode ter 10 "nomes".

O código é mais ou menos assim:

#include <stdlib.h>
#include <stdio.h>

struct cliente{
char nomeCliente[255];                        /* DADOS DO CLIENTE */
};
typedef struct cliente CLIENTE;

void criaCliente(CLIENTE * p){
         printf("Nome Cliente: ");
         scanf("%[^\n]", &p->nomeCliente);
}

int main(){
int nClientes=0;
CLIENTE cliente[10]; 

if (nClientes >=10 ) printf("Não há mais espaço para guardar dados");
  else {
            cliente[nClientes]=criaCliente(&cliente[nClientes]);
            nClientes ++;}
}

Simplicando o código é este. No entanto ao compila-lo assinala-me um erro, precisamente na antepenultima linha, que diz que " cannot convert from 'void' to 'CLIENTE' ". Alguém me pode ajudar?

Link to comment
Share on other sites

Estás a fazer uma coisa esquisita. Tens uma função do tipo void e depois "estás a receber" em cliente[nClientes] um void. Se estás a passar por referência a posição não precisas de receber. Basta fazeres:

criaCliente(&cliente[nClientes]);

here since 2009

Link to comment
Share on other sites

Obrigado desde já.

Ve a antepenultima linha do código, já assim está. Eu acho que tenho de mudar o tipo da função criaCliente, ao invés de void, por CLIENTE, mas no entanto esta função tem de retornar alguma coisa, o quê?

Link to comment
Share on other sites

Nesta linha de código:

cliente[nClientes]=criaCliente(&cliente[nClientes]);

Mudei e ficou assim:

criaCliente(&cliente[nClientes]);

Agora surge outra dúvida. Ele automaticamente vai adicionando os dados á cada valor da estrutura, e se eu quiser listar(imprimir/mostrar), o valor da estrutura de todos os clientes, de 1 á 5 por exemplo, como faço?

Link to comment
Share on other sites

Mas neste caso o array é um struct, é tão simples assim?

Btw, tenho isto, mas ao imprimir aparece algo estranho:

void mostraCliente(CLIENTE * p){  
printf("Nome: %s\n", p->nomeCliente);
}

int main(){
     int i;

   for(i=0; i <= nClientes; i++)
        mostraCliente(&cliente[nClientes]);

}
Link to comment
Share on other sites

Atenção que se for só para mostrar a informação não precisas de todo de passar por referência. Podes perfeitamente passar por valor e mostrar só a informação, sem andares a utilizar o operador ->.

Acho que ainda não percebeste muito bem o que é passagem por referência.

here since 2009

Link to comment
Share on other sites

Só uma pergunta:

scanf("%[^\n]", &p->nomeCliente);

Isto está a funcionar?

Está sim, no fundo o que faz é copiar todos os caracteres digitados e guardar na variavel nomeCliente da struct. Tenho trabalhado no VisualStudio2010, ele dá warnings quanto ao scanf, mas não impede a execução do código. Outro input melhor que o scanf é o fgets certo?

Ja tenho o código todo feito. É possível adicionar 10 clientes, marcar 100 consultas, listar os clientes existentes, procurar por clientes, procurar e listar as consultas também. Está perfeito agora.

Link to comment
Share on other sites

Este:

0xC0000005: Access violation writing location 0x0000cccc

E depois aparece outra aba com códigos em Assembly. Isto no Visual Studio.

Btw, correr ele corre, mas na hora de digitar os dados do "pc->dia", sem o "&" ele dá o tal erro, até o CMD bloqueia.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.