Olá, pessoal, estou criando uma “struct” com ponteiro com main.c, e criando novo menu chamado arquivo.c. Gostaria de saber como faço para criar envio como parâmetro como referência.
Segue arquivo main.c
//#include <stdio.h>
//#include <stdlib.h>
//#include <locale.h>
//#include “arquivos.h”
typedef struct{
char nome[30];
int anoNascimento;
double montante;
//}c_cliente;
//int opcao = 0;
//void limpar_entrada() {
char c;
while ((c = getchar()) != ‘\n’ && c != EOF) {}
}
void incluirCliente(c_cliente* c)
{
system(“cls”);
static int i = 0;
char cont;
do
{
printf("Dados do %dº cliente \n", i + 1);
printf("Nome: " );
scanf("%s", &(c + i)->nome);
printf("Ano Nascimento: ");
scanf("%d",&(c + i)-> anoNascimento);
printf("Montante em Gastos R$");
scanf("%lf",&(c + i)->montante);
i++;
limpar_entrada();
printf("Deseja continuar [S/N] " ) ;
scanf("%c", &cont);
if((cont == 'n') || (cont == 'N'))
{
break;
}
system("cls");
if( i >= 10)
{
printf("Atingido quantidade máxima de clientes");
break;
}
}
while(i < 10 || cont == 'n' || cont == 'N');
}
void listarCliente(c_cliente* c)
{
for(int i = 0; i < 10; i++)
{
if(((c + i)-> nome != “”) || ((c + i)-> nome !=“-”))
{
printf(“===================================\n”);
printf(“Dados do %d cliente \n”, i + 1);
printf(“===================================\n”);
printf(“Nome: %s \n”, (c+i)-> nome) ;
printf(“Ano Nascimento: %d\n”, (c + i)->anoNascimento);
printf(“Montante em R$%.2lf\n”, (c + i)->montante);
}
}
}
void removerCliente(c_cliente* c)
{
char procurar[30];
//char procurar[30];
limpar_entrada();
printf(“Informe um nome para remover: " );
scanf(”%s", &procurar);
for(int i = 0; i < 10; i++)
{
if(!strcmp(procurar, (c + i)-> nome))
{
strcpy((c + i)->nome, “-”);
(c + i)->anoNascimento = 0;
(c + i)->montante = 0;
}
}
}
void zerarMontantes(c_cliente* c)
{
char zerar;
limpar_entrada();
printf(“Deseja zerar montantes? [s][n] → “);
scanf(”%c”, &zerar);
if(zerar == ‘S’ || zerar == ‘s’)
{
for(int i = 0; i < 10; i++)
{
printf(“Zerando montante do %d cliente que eh %s\n”, i + i, (c+i)->nome);
(c + i)->montante = 0.0;
}
printf(“Montantes zerados com sucesso\n”);
}
}
void melhorComprador(c_cliente* c)
{
printf(“…Melhor Comprador…\n”);
char n[30];
int ano = 0;
double mon = 0;
strcpy(n, (c + 0)->nome);
ano = (c + 0)->anoNascimento;
mon = (c + 0)->montante;
for(int i = 1; i < 10; i++)
{
if((c + i)->montante > mon)
{
strcpy(n, (c + i)->nome);
ano = (c + i)->anoNascimento;
mon = (c + i)->montante;
}
}
printf(“Nome do Melhor comprador %s com ano de nascimento %d no valor de montante de R$%.2lf\n”, n, ano, mon);
}
void montanteCliente(c_cliente* c){
char n[30];
double m;
printf(“Informe um nome para somar: “);
scanf(”%s”, n);
for(int i = 0; i < 10;i++){
if(!strcmp(n,(c + i)-> nome))
{
m += (c + i)->montante;
}
}
printf(“Montante do Cliente %.2lf\n”, m);
}
void menu()
{
printf(“±------------------------------------------+\n”);
printf(“|\t\tSISTEMA \n”);
printf(“±------------------------------------------+\n”);
printf(“| [ 1 ] - Incluir um novo cliente \n”);
printf(“| [ 2 ] - Listar clientes \n”);
printf(“| [ 3 ] - Remover cliente \n”);
printf(“| [ 4 ] - Zerar todos montantes \n”);
printf(“| [ 5 ] - Listar o melhor comprador \n”);
printf(“| [ 6 ] - Exibir montante de um cliente específico \n”);
printf(“| [ 7 ] - Operacoes de Arquivo\n”);
printf(“| [ 8 ] - Sair \n”);
printf(“±------------------------------------------+\n”);
printf(“|Opção “);
scanf(”%d”, &opcao);
/*- incluir um novo cliente
- remover cliente - atualizar o montante de compras do cliente realizadas no mês corrente
- zerar todos os montantes de compras por ocasião da virada de mês
- listar o cliente melhor comprador
- exibir um montante de compras de um cliente específico.*/
}
void operacoes_arquivo(){
char op;
system(“cls”);
limpar_entrada();
printf(“===========================================\n”);
printf(" [ g ] → Gravar em arquivo \n");
printf(" [ r ] → Ler em arquivo \n");
printf(" [ v ] / [ x ]- Voltar para o Menu anterior\n");
printf(“===========================================\n”);
printf(“Opcao: “);
scanf(”%c”, &op);
switch(op){
case ‘g’:
gravarArquivo(&cliente[0]);
break;
case ‘v’: case ‘x’:
menu();
break;
}
system(“cls”);
}
int main()
{
setlocale(LC_ALL, “Portuguese”);
int i = 0;
char cont;
c_cliente cliente[10];
c_cliente* c;
c = &cliente[0];
for(int i = 0; i < 10; i++)
{
//cout << "Zerando montante do " << i + 1 << " cliente: " << endl;
strcpy((c + i)->nome, "");
(c + i)->anoNascimento = 0;
(c + i)->montante = 0.0;
}
do{
//system("cls");
menu();
switch(opcao){
case 1:
incluirCliente(&cliente[0]);
break;
case 2:
listarCliente(&cliente[0]);
break;
case 3:
removerCliente(&cliente[0]);
break;
case 4:
zerarMontantes(&cliente[0]);
break;
case 5:
melhorComprador(&cliente[0]);
break;
case 6:
montanteCliente(&cliente[0]);
break;
case 7:
operacoes_arquivo();
break;
}
}while(opcao != 8);
return 0;
}//
Existe outro arquivo chamado arquivo.c que faz com que a lista como ponteiro para salvar em arquivo.
//typedef struct c_cliente *c;
#include “main.h”
//typedef struct c_cliente *c;
void gravarArquivo(c_cliente* []cliente){
FILE *arq;
int pos = 0;
arq = fopen(“C:\Users\thiag\Desktop\TesteArquivo\cliente.txt”,“wb”);
if(arq == NULL){
printf(“Erro na abertura do arquivo\n”);
return 0;
}
for(pos = 0; pos < 10;pos++){
fprintf(arq, “%s;%d;%.2lf\n”, (c+pos)->nome, (c+pos)->anoNascimento, (c+pos)->montante);
//}
//fclose(arq);
// return 0;
//}//
Aparece no método o erro error: unknow type name “c_cliente”, se não tiver esse qual sintaxe correta?