@arfneto, vou responder um por um. Desculpe se alguma pergunta for leiga. Realmente estou no início.
Como dito anteriormente, nos foi recomendado usar o system("cls") para limpar a tela (limpar tudo que aconteceu até aquele ponto para a tela não ficar poluída) e o system("Pause") é para que o Prompt de Comando não feche ao final do teste do programa e consigamos ler tudo que foi escrito/respondido.
Perfeito. Usei sua recomendação e gostei. Sobre o uso de arquivos, sinceramente não sei como fazer isso.
Por que desperdício ou erro? Me explique por, favor. Me dê um exemplo usando o código onde eu retornaria algo (transformando função void em return). Exemplo: o que exatamente eu retornaria e como usaria esse retorno; qual a vantagem no caso específico).
Perdão. Não entendi muito bem essa parte. No caso, o ideal seria eu usar um arquivos com respostas pré-estabelecidas ao invés de eu digitar manualmente. É isso? Se sim, como eu faria isso?
Poderia me explicar o que constantes e como funcionam dentro do código?
Ainda não tem, mas vou colocar no futuro. Então, ao invés de uma função void para o menu, faria uma função com retorno?
Quando você diz fluxo de saída está se referindo aos "printf"?
Sobre o uso de arquivos, sinceramente não sei como fazer isso. Poderia me ensinar ou passar alguma referência?
Obrigado por tirar um tempo e me responder.
Aqui está o código novo (No momento, está armazenando e mostrando apenas um endereço por empresa). Gostaria que apontassem quais mudanças específicas preciso fazer para armazenar e depois exibir os "n" endereços de cada empresa.
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
#include <string.h>
typedef struct{
char pais[80];
char estado[80];
char municipio[80];
char logradouro[80];
int numero;
int cep;
} Endereco;
typedef struct{
int id;
char nome[80];
char cnpj[80];
char proprietario[80];
int funcionarios;
int qtd_endereco;
Endereco endereco;
} Empresa;
//DECLARACAO DAS FUNCOES QUE estão ABAIXO DA MAIN
void limpar();
void limpezaDados(int tam, Empresa cadastro[]);
void cadastrarEmpresa(int tam, Empresa cadastro[]);
void imprimirRelatorio(int tam, Empresa cadastro[]);
void buscaCompara(int tam, Empresa cadastro[]);
//INICIO DA MAIN
int main(void) {
system("clear");
setlocale(LC_ALL, "Portuguese_Brazil");
int tam;
printf("Este programa cadastra e imprime informações de N empresas!\n\n");
printf("Insira o numero de empresas a serem cadastradas: ");
scanf("%d",&tam);
//LOCAL ONDE SÃO ARMAZENADOS OS DADOS
Empresa cadastro[tam];
//INVOCO A LIMPEZA DE DADOS
limpezaDados(tam, cadastro);
//INVOCO A ENTRADA DE DADOS
cadastrarEmpresa(tam, cadastro);
//INVOCO O RELATORIO INICIAL
imprimirRelatorio(tam, cadastro);
//INVOCO A FUNCAO QUE BUSCA POR NOME OU CNPJ E EXIBE RELATORIO FINAL
buscaCompara(tam, cadastro);
printf("\n\nObrigado por utilizar o nosso programa!!!\n\n");
system("Pause");
return 0;
}
//FUNCAO P/ LIMPAR A TELA
void limpar(){
printf("\n\n\n");
system("clear");
printf("\n\n\n");
}
//FUNCAO PARA LIMPEZA DE DADOS NAS ARRAYS
void limpezaDados(int tam, Empresa cadastro[]){
int i;
for(i=0;i<tam;i++){
strcpy(cadastro[i].nome, "NULL");
strcpy(cadastro[i].cnpj, "NULL");
strcpy(cadastro[i].proprietario, "NULL");
cadastro[i].funcionarios = 0;
cadastro[i].qtd_endereco = 0;
strcpy(cadastro[i].endereco.pais, "NULL");
strcpy(cadastro[i].endereco.estado, "NULL");
strcpy(cadastro[i].endereco.municipio, "NULL");
strcpy(cadastro[i].endereco.logradouro, "NULL");
cadastro[i].endereco.numero = 0;
cadastro[i].endereco.cep = 0;
}
}
//FUNCAO PARA ENTRADA DE DADOS
void cadastrarEmpresa(int tam, Empresa cadastro[]){
int i;
for(i=0;i<tam;i++){
printf("\n\nCADASTRO DA EMPRESA %d\n",i+1);
printf("\nInforme o ID da empresa: ");
scanf("%d%*c", &cadastro[i].id);
printf("\nInforme o NOME da empresa: ");
fgets(cadastro[i].nome,79,stdin);
printf("\nInforme o CNPJ da empresa: ");
fgets(cadastro[i].cnpj,79,stdin);
printf("\nInforme o PROPRIETARIO da empresa: ");
fgets(cadastro[i].proprietario,79,stdin);
printf("\nInforme a QUANTIDADE de funcionarios da empresa: ");
scanf("%d%*c", &cadastro[i].funcionarios);
printf("\nInforme a QUANTIDADE de enderecos da empresa: ");
scanf("%d%*c", &cadastro[i].qtd_endereco);
//USO OUTRO FOR PARA MOSTRAR OS "N" ENDEREÇOS? E COMO SERIA ESSE FOR?
printf("\nInforme o ENDERECO da empresa: ");
printf("\n\nPais: ");
fgets(cadastro[i].endereco.pais,79,stdin);
printf("\nEstado: ");
fgets(cadastro[i].endereco.estado,79,stdin);
printf("\nMunicipio: ");
fgets(cadastro[i].endereco.municipio,79,stdin);
printf("\nLogradouro: ");
fgets(cadastro[i].endereco.logradouro,79,stdin);
printf("\nNumero: ");
scanf("%d%*c",&cadastro[i].endereco.numero);
printf("\nCEP: ");
scanf("%d%*c",&cadastro[i].endereco.cep);
printf("\n\n");
}
}
//FUNCAO PARA EXIBIR INFOS DAS EMPRESAS
//POR QUE EU TENHO QUE USAR DUPLA QUEBRA DE LINHA PRA SEPARAR ALGUNS?
void imprimirRelatorio(int tam, Empresa cadastro[]){
int i;
for(i=0;i<tam;i++){
printf("\n\nRELATORIO INICIAL DA EMPRESA");
printf("\n================================\n");
printf("\nID DA EMPRESA: %d", cadastro[i].id);
printf("\n\nNOME DA EMPRESA: %s", cadastro[i].nome);
printf("\nCNPJ DA EMPRESA: %s", cadastro[i].cnpj);
printf("\nPROPRIETARIO: %s", cadastro[i].proprietario);
printf("\nQUANT DE FUNCIONARIOS: %d", cadastro[i].funcionarios);
printf("\n\nQUANT DE ENDERECOS: %d",cadastro[i].qtd_endereco);
//O QUE FAZER PARA MOSTRAR 'N' ENDERECOS? USO OUTRO FOR? E COMO SERIA ESSE FOR?
printf("\n\n\nENDERECO DA EMPRESA: ");
printf("\n\nPais: %s", cadastro[i].endereco.pais);
printf("\nEstado: %s", cadastro[i].endereco.estado);
printf("\nMunicipio: %s", cadastro[i].endereco.municipio);
printf("\nLogradouro: %s", cadastro[i].endereco.logradouro);
printf("\nNumero: %d", cadastro[i].endereco.numero);
printf("\n\nCEP: %d", cadastro[i].endereco.cep);
}
printf("\n");
}
//FUNCAO PARA BUSCAR E COMPARAR
void buscaCompara(int tam, Empresa cadastro[]){
char nome_busca[80];
int i;
int controle = -1;
printf("\n\nInforme o NOME ou CNPJ da empresa para busca no sistema: ");
fgets(nome_busca,79,stdin);
fflush(stdin);
for(i=0;i<tam;i++){
if(strcmp(cadastro[i].nome,nome_busca) == 0 || strcmp(cadastro[i].cnpj,nome_busca) == 0){
controle = i;
}
}
if(controle != -1){
printf("\n\nRELATORIO FINAL DA EMPRESA");
printf("\n================================\n");
printf("\nID DA EMPRESA: %d", cadastro[controle].id);
printf("\n\nNOME DA EMPRESA: %s", cadastro[controle].nome);
printf("\nCNPJ DA EMPRESA: %s", cadastro[controle].cnpj);
printf("\nPROPRIETARIO: %s", cadastro[controle].proprietario);
printf("\nQUANT DE FUNCIONARIOS: %d", cadastro[controle].funcionarios);
printf("\n\nQUANTIDADE DE ENDEREÇOS: %d", cadastro[controle].qtd_endereco);
fflush(stdin);
//O QUE FAZER PARA MOSTRAR 'N' ENDERECOS? USO OUTRO FOR? E COMO SERIA ESSE FOR?
printf("\n\nENDERECO");
printf("\n\nPais: %s", cadastro[controle].endereco.pais);
printf("\nEstado: %s", cadastro[controle].endereco.estado);
printf("\nMunicipio: %s", cadastro[controle].endereco.municipio);
printf("\nLogradouro: %s", cadastro[controle].endereco.logradouro);
printf("\nNumero: %d", cadastro[controle].endereco.numero);
printf("\n\nCEP: %d", cadastro[controle].endereco.cep);
printf("\n");
}else{
printf("\n\nA empresa não foi encontrada!\n");
}
}
Então, bastava eu colocar o número "10" (no caso, o máximo de endereços) no ligar do "i"? Mandei o código novamente aqui na discussão. Dá uma olhada, se puder, por favor.