#define FICH "Dados.Dat" /* Ficheiro com os Dados */
#define DIM 30
FILE *fp; /* Variavel Global pois e' util ao longo do prog. */
int cont = 0;
typedef struct
{
char Nome[DIM+1];
char Tipo[DIM+1];
int Ano[DIM+1];
int Tempo[DIM+1];
int Duracao[DIM+1];
char Desc[DIM+1];
int Data[11];
char Pais[DIM+1];
char Lingua [DIM+1];
char Empresa[2*DIM+1];
char elenco[DIM+1];
char Diretor[DIM+1];
int ini[4];
int fim[4];
char Status; /* '*' Indica que o registo esta apagado */
} PRODUCAO;
void Mensagem(char *msg);
/* Le os dados de um registo introduzidos pelo utilizador */
void Ler_Producao(PRODUCAO *p)
{
int i;
printf("titulo da producao : "); gets(p->Nome);
printf("Tipo de producao : "); gets(p->Tipo);
printf("ano de producao : "); scanf("%d",&Ano);
printf("duracao da producao em minutos : "); gets(p->Duracao);
printf("tempo da producao em dias : "); gets(p->Tempo);
printf("data do lancamento : "); gets(p->Data);
printf("breve descrição ate 30 palavras : "); gets(p->Desc);
printf("pais onde foi produzido : "); gets(p->Pais);
printf("lingua da producao : "); gets(p->Lingua);
printf("Empresa distribuidora : "); gets(p->Empresa);
printf("Diretor : "); gets(p->Diretor);
while (p.elenco!="s" || p.elenco!="S" || cont<=20) {
printf("\nindique um membro do elenco ,se quiser sair escreva apenas a letra S.:");
scanf("%29s", &p->elenco[i]);
i++;
if (p->elenco[i] == 'S' && p->elenco[i] == '#define FICH "Dados.Dat" /* Ficheiro com os Dados */
#define DIM 30
FILE *fp; /* Variavel Global pois e' util ao longo do prog. */
int cont = 0;
typedef struct
{
char Nome[DIM+1];
char Tipo[DIM+1];
int Ano[DIM+1];
int Tempo[DIM+1];
int Duracao[DIM+1];
char Desc[DIM+1];
int Data[11];
char Pais[DIM+1];
char Lingua [DIM+1];
char Empresa[2*DIM+1];
char elenco[DIM+1];
char Diretor[DIM+1];
int ini[4];
int fim[4];
char Status; /* '*' Indica que o registo esta apagado */
} PRODUCAO;
void Mensagem(char *msg);
/* Le os dados de um registo introduzidos pelo utilizador */
void Ler_Producao(PRODUCAO *p)
{
int i;
printf("titulo da producao : "); gets(p->Nome);
printf("Tipo de producao : "); gets(p->Tipo);
printf("ano de producao : "); scanf("%d",&Ano);
printf("duracao da producao em minutos : "); gets(p->Duracao);
printf("tempo da producao em dias : "); gets(p->Tempo);
printf("data do lancamento : "); gets(p->Data);
printf("breve descrição ate 30 palavras : "); gets(p->Desc);
printf("pais onde foi produzido : "); gets(p->Pais);
printf("lingua da producao : "); gets(p->Lingua);
printf("Empresa distribuidora : "); gets(p->Empresa);
printf("Diretor : "); gets(p->Diretor);
while (p.elenco!="s" || p.elenco!="S" || cont<=20) {
printf("\nindique um membro do elenco ,se quiser sair escreva apenas a letra S.:");
scanf("%29s", &p->elenco[i]);
i++;
if (p->elenco[i] == 'S' && p->elenco[i] == '%pre%') break;
else cont++;
}
p->Status=' ';
fflush(stdin);
}
/* Mostra no ecra, os dados existente no registo */
void Mostrar_Producao(PRODUCAO )
{
printf("Titulo.:%-30s\n",Nome);
printf("Tipo.:%-30s\n",Tipo);
printf("Ano de producao.:%4d\n",Ano);
printf("Duracao.:%3d\n",Duracao);
printf("Tempo que demorou a produzir.:%3d\n",Tempo);
printf("Data.:%-10s\n",Data);
printf("Breve Descricao.:%-30s\n",Desc);
printf("Pais.:%-30s\n",Pais);
printf("Idioma.:%-30s\n",Lingua);
printf("Empresa Distribuidora.:%-60s\n",Empresa);
printf("Diretor.:%-30s\n",Diretor);
for (int i = 0; i < cont; i++) printf("\nElenco: %s", elenco);
}
void Listar()
{ long int N_Linhas =0;
PRODUCAO reg;
rewind(fp);
while(1)
{
if (fread(®,sizeof(reg),1,fp)!=1) break;/* Sair do Ciclo */
if (reg.Status=='*') continue ; /* Passa ao proximo */
Mostrar_Producao(reg);
N_Linhas++;
if (N_Linhas%20==0)
Mensagem("PRIMA <ENTER> para continuar . . . ");
}
Mensagem("\n\nPRIMA <ENTER> para continuar . . . "); /* No fim da Listagem */
}
void Inic()
{
fp=fopen(FICH,"r+b"); /* Tentar Abrir */
if (fp==NULL)
{
fp =fopen(FICH,"w+b"); /* Criar o Ficheiro */
if (fp==NULL)
{
fprintf(stderr,"ERRO FATAL: Impossível Criar o Ficheiro de Dados\n");
exit(1);
}
}
}
main()
{
char Opcao;
Inic();
while ((Opcao=Menu(MainMenu))!=OP_SAIR)
switch(Opcao)
{
while((Opcao=Menu(ProducaoMenu)) |=OP_PRODUCAO_SAIR)
switch (Opcao)
{
case OP_PRODUCAO_INSERIR: Inserir_Producao(); break;
case OP_PRODUCAO_ALTERAR: Alterar_Producao(); break;
case OP_PRODUCAO_APAGAR: Apagar_Producao(); break;
case OP_PRODUCAO_LISTAR: Listar(); break;
}
') break;
else cont++;
}
p->Status=' ';
fflush(stdin);
}
/* Mostra no ecra, os dados existente no registo */
void Mostrar_Producao(PRODUCAO )
{
printf("Titulo.:%-30s\n",Nome);
printf("Tipo.:%-30s\n",Tipo);
printf("Ano de producao.:%4d\n",Ano);
printf("Duracao.:%3d\n",Duracao);
printf("Tempo que demorou a produzir.:%3d\n",Tempo);
printf("Data.:%-10s\n",Data);
printf("Breve Descricao.:%-30s\n",Desc);
printf("Pais.:%-30s\n",Pais);
printf("Idioma.:%-30s\n",Lingua);
printf("Empresa Distribuidora.:%-60s\n",Empresa);
printf("Diretor.:%-30s\n",Diretor);
for (int i = 0; i < cont; i++) printf("\nElenco: %s", elenco);
}
void Listar()
{ long int N_Linhas =0;
PRODUCAO reg;
rewind(fp);
while(1)
{
if (fread(®,sizeof(reg),1,fp)!=1) break;/* Sair do Ciclo */
if (reg.Status=='*') continue ; /* Passa ao proximo */
Mostrar_Producao(reg);
N_Linhas++;
if (N_Linhas%20==0)
Mensagem("PRIMA <ENTER> para continuar . . . ");
}
Mensagem("\n\nPRIMA <ENTER> para continuar . . . "); /* No fim da Listagem */
}
void Inic()
{
fp=fopen(FICH,"r+b"); /* Tentar Abrir */
if (fp==NULL)
{
fp =fopen(FICH,"w+b"); /* Criar o Ficheiro */
if (fp==NULL)
{
fprintf(stderr,"ERRO FATAL: Impossível Criar o Ficheiro de Dados\n");
exit(1);
}
}
}
main()
{
char Opcao;
Inic();
while ((Opcao=Menu(MainMenu))!=OP_SAIR)
switch(Opcao)
{
while((Opcao=Menu(ProducaoMenu)) |=OP_PRODUCAO_SAIR)
switch (Opcao)
{
case OP_PRODUCAO_INSERIR: Inserir_Producao(); break;
case OP_PRODUCAO_ALTERAR: Alterar_Producao(); break;
case OP_PRODUCAO_APAGAR: Apagar_Producao(); break;
case OP_PRODUCAO_LISTAR: Listar(); break;
}
When I try to list the data entered in the numerical cases the program does not give me the value entered but another value that I suppose is the position where it is. and casting function can not make it stop because I used a for so I can not use while someone knows a way to repair this?