• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Innight

Problema listar ficheiros

4 mensagens neste tópico

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//FUNÇÕES
struct tagCursoFile
{
char nome; 
  char descricao;
int ciclo;
};

struct tagCursoMem
{
char nome; 
char descricao;
int ciclo;
struct tagCursoMem* pNext;
};

//MENUS
void mostrarOpcao ( );
void mostraGestao ( );
void mostraConsulta ( );

void mostrarGestaoArea ( int operacao );
void mostrarConsultaArea ( int operacao);
void tipoarea (int opcao, char OP[]);

struct tagCursoFile cursoFile;
struct tagCursoMem* pHead = NULL;
struct tagCursoMem* pNew, *pAux;


nt nAlterado = 0;
int main(int argc, char *argv[])
{
    int opcao;
    int operacao;
    int op;
        
//FUNCOES declaradas
void AddToHeadCurso(struct tagCursoMem** pAuxHead, struct tagCursoMem* pAuxNew);
void GravarCurso(int nstatus, struct tagCursoMem* pAux);
void LeituraCurso(int nstatus, struct tagCursoMem* pAux);
int main()
{
    int opcao;
    int operacao;
    int op;
}
   do
    {
      mostrarOpcao ( );
      scanf("%d",&opcao);
      switch (opcao)     // MENU CONSULTA OU GESTAO
      {
       case 1 : 
            do
            {
                mostraGestao ( );
                scanf("%d",&operacao);
                switch (operacao)     // MENU AREA DE GESTAO
                      {
                      case 1:  
                      case 2:
                      case 3:
                      case 4:
                             do
                             {
                                 mostrarGestaoArea(operacao);
                                 scanf("%d",&op);
                                 switch (op)     // MENU FUNCAO DE GESTAO (CRI,ADI,REM)
                                       {
                                       case 1: // criar ,cada if corresponde a uma area
                                       if (operacao == 1){
                                       pNew = (struct tagCursoMem*)malloc(sizeof(struct tagCursoMem));
                                       pNew->pNext = NULL;
                                       printf("Indique o nome do curso:\n");
                                       scanf("%sc", &pNew->nome);
                                       printf("Indique a descricao:\n");
                                       scanf("%s", &pNew->descricao);
                                       printf("Indique o ciclo:\n");
                                       scanf("%d", &pNew->ciclo);
                                       AddToHeadCurso(&pHead, pNew);
                                       nAlterado = 1;
                                       GravarCurso(nAlterado, pHead);
                                       nAlterado = 0;
                                       system("pause");
                                       break;
                                                 }
                                                 if (operacao == 2){
break;
                                                 }
                                                 if (operacao == 3){
break;
                                                 }
                                                 if (operacao == 4){
break;
                                                 }
                                            case 2: //REMOVE
                                                 if (operacao == 1){
                                                
                                                     break;
                                                 }                                         
                                                 if (operacao == 2){
                                                    //eliminarTurmaCurso();
                                                 }
                                                 case 3://ALTERAR    
                                                 break;
                                                 case 4:
                                                 if(operacao == 1) {
                                                             printf("Listagem Completa dos Cursos\n");
                                                             LeituraCurso(nAlterado, pHead);
                                                 }
  }                                 
                             }
                             while (op != 0);
                             break;
                      }
            }
            while (operacao != 0);
            break; 
       case 2 : // LISTAGEM
            do  
            {
                 mostraConsulta ( );
                 do
                 {
                 scanf("%d",&operacao);
                 mostrarConsultaArea(operacao);
                 }
                 while (operacao != 0);
                      
            }
            while (operacao != 0);
            break;
       case 0 : 
           break;
       default :
           printf("\n#### Opcao invalida ####\n%d",opcao);
           break;
       }
    }
    while (opcao != 0);
         
  
  system("PAUSE");	
  return 0;
}
void mostrarOpcao ( )
{
     system("cls");
     printf("\n\t:::Menu:::");
     printf("\n(escolha a operacao a efectuar)\n");
     printf("\n1 - \t Gestao de Informacao");
     printf("\n2 - \t Consultas");
     printf("\n\n0 - \t Sair Programa\n");
}

void mostraGestao ( )
{
     system("cls");
     printf("\n\t:::Menu:::");
     printf("\nGestao de Informacao/\n");
     printf("\n1 - \tGerir Curso");
     printf("\n2 - \tGerir Turma");
     printf("\n3 - \tGerir Horarios");
     printf("\n4 - \tGerir Disciplina");
     printf("\n\n0 - \tVoltar\n");
}

void tipoarea (int area, char OP[])
{
if (area ==1) strcpy(OP,"curso");      
if (area ==2) strcpy(OP,"Turma");
if (area ==3) strcpy(OP,"Horario");  
if (area ==4) strcpy(OP,"Disciplina");  
}

void mostrarGestaoArea (int  opcao)
{
     system("cls");
     char OP[9];
     tipoarea (opcao, OP);
     printf("\n\t:::Menu:::");
     printf("\nGestao de Informacao/%s",OP);
     printf("\n\n1 - \t Criar %s",OP);
     printf("\n2 - \t Remover %s",OP);
     printf("\n3 - \t Alterar %s",OP);
     printf("\n4 - \t Listar  %s",OP);
     printf("\n\n0 - \tVoltar\n");
}
void mostraConsulta ( )
{
     system("cls");
     printf("\n\t:::Menu:::");
     printf("\nConsultas/\n");
     printf("\n1 - \tPesquisa Curso");                          
     printf("\n2 - \tPesquisa Horarios Actuais");               
     printf("\n3 - \tPesquisa Horarios Passados");              
     printf("\n4 - \tPesquisa Turma e Disciplinas");           
     printf("\n5 - \tPesquisa Disciplinas Actuais");  
     printf("\n6 - \tPesquisa Disciplinas Passadas"); 
     printf("\n\n0 - \tVoltar\n");
}

void mostrarConsultaArea ( int operacao){
     
     switch(operacao)
     {
     case 1 :
          printf("Insira o nome do Curso a pesquisar\n");
          break;
     case 2:
          printf("Insira o Horario Actual a pesquisar\n");
          break;
     case 3:
          printf("Insira o Horario Antigo a pesquisar\n");  
          break;
     case 4:
          printf("Insira a Turma e o nome da Disciplina a pesquisar\nTurma :");
          break;
     case 5:
          printf("Insira o nome da Disciplina Actual a pesquisar\n");
          break;
     case 6:
          printf("Insira o nome da Disciplina Antiga a pesquisar\n"); 
         break;
     }
     }

//FUNCOES

void AddToHeadCurso(struct tagCursoMem** pAuxHead, struct tagCursoMem* pAuxNew)
{
if(*pAuxHead != NULL)
pAuxNew->pNext = *pAuxHead;
*pAuxHead = pAuxNew;
}void GravarCurso(int nStatus, struct tagCursoMem* pAux)
{
FILE* pFile;
struct tagCursoFile Curso;
if(nStatus == 1) {
if((pFile = fopen("Cursos.data", "w")) != NULL) {
while(pAux != NULL) {
Curso.nome = pAux->nome;
Curso.descricao = pAux->descricao;
Curso.ciclo = pAux->ciclo;
fwrite(&Curso, sizeof(struct tagCursoFile), 1, pFile);
pAux = pAux->pNext;
}
}
fclose(pFile);
}
}
void LeituraCurso(int nstatus, struct tagCursoMem* pAux)
{
int nCntAlunos=0;
FILE* pFile;
if((pFile = fopen("Cursos.data", "rb")) != NULL) {
while(fread(&cursoFile, sizeof(struct tagCursoFile), 1, pFile) != 0) {
pNew = (struct tagCursoMem*)malloc(sizeof(struct tagCursoMem));
pNew->pNext = NULL;
pNew->nome = cursoFile.nome;
pNew->descricao = cursoFile.descricao;
pNew->ciclo = cursoFile.ciclo;
AddToHeadCurso(&pHead, pNew);
nCntAlunos++;
}
printf("Foram lidos %d registos de Cursos\n\n", nCntAlunos);
fclose(pFile);
}

Boas.O meu problema´aqui é simples, nao consigo resolver. Qunado vou a listar os caracteres do curso (

printf("%d\n",Curso.ciclo); 

printf("%s\n",Curso.descricao);

printf("%s\n",Curso.nome);

)

Dá criticar erro a fazer o printf do Curso.descricao e do nome, por causa serem %s.Mas quando eu mudo para %c ja nao da erro,mas com está com %c ja mostra o primeiro caracter da palavra pretendida.Alguma ideia para mostrar o conteudo completo sem ter critical erro?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nas estruturas declaraste descrição e nome como caracteres.

se queres um array de caracteres tens duas hipoteses

1 - declaras um apontador para caracter (char *) mas depois vais ter de alocar espaço dinamicamente com malloc para poder guardar la um array

2 - declaras logo um array de caracteres com tamanho estático ex: char nome[100];

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

vou pela segunda opção, então é só preciso mudar isto:

struct tagCursoFile
{
char nome[80]; 
  char descricao[80];
int ciclo;
};

struct tagCursoMem
{
char nome[80]; 
char descricao[80];
int ciclo;
struct tagCursoMem* pNext;
};

O resto é tudo como esta,ou é preciso tambem mudar mais linhas no codigo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

penso que não...

experimenta e se der mais probelemas mete aqui!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora