Thread: Very problems with Lists

  1. #1
    Registered User
    Join Date
    Mar 2008
    Posts
    34

    Very problems with Lists

    I need someone to correct anithing that is wrong in this code... and i want to know how to create a non determined number of lists, something like we put a new list and we can add more lists when we want...


    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define NUM 9
    
    
    typedef struct{
                int dia,mes;
    } Data;
    typedef struct{
                int x,y;
    } Coords;
    typedef struct{
    		char nome[50], morada[75], email[40], comida[80], telefone[10], observacoes[120];
            Coords coordenadas; 
            int dia_descanso;
            Data inicio_ferias, fim_ferias;
    }Restaurante;
    typedef struct lnode *List;
    typedef struct lnode {
    Restaurante info;
    List next;
    } List_node;
    
    
    int fputrestaurante(Restaurante *rest)
    {
        FILE *fp = fopen("data.dat", "wb");
        int cnt = -1;
        if (fp != NULL)
        cnt = fwrite((void *)rest, sizeof(rest), NUM, fp);
        fclose(fp);
        return cnt; /* número de elementos escritos ou -1 */
    }
    
    int testames(int mes) {
        int diames;
        lab:
        switch (mes) {
                   case 1: diames=31; break;
                   case 3: diames=31; break;
                   case 5: diames=31; break;
                   case 7: diames=31; break;
                   case 8: diames=31; break;
                   case 10: diames=31; break;
                   case 12: diames=31; break;
                   case 2: diames=28; break;
                   case 4: diames=30; break;
                   case 6: diames=30; break;
                   case 9: diames=30; break;
                   case 11: diames=30; break;
                   default: printf("Erro de leitura do mês"); goto lab;
                   }
        return diames;
    }
    
    List cria_lista (void){
    	List aux;
    	Restaurante rest;
    	aux = (List) malloc (sizeof (List_node));
    	if (aux != NULL) {
    		aux->info = rest;
    		aux->next = NULL;
    	}
    	return aux;
    }
    
        
    
    Restaurante criarrestaurante(Restaurante *resta) {
         
         int i=1,diames;
         printf("Nome do restaurante:");
         scanf("%s", &resta->nome);
         scanf("%*[^\n]");
         printf("Morada do restaurante:");
         scanf("%s", &resta->morada);
         scanf("%*[^\n]");
         printf("E-mail do restaurante:");
         scanf("%s", &resta->email);
         scanf("%*[^\n]");
         printf("Tipo de comida do restaurante:");
         scanf("%s", &resta->comida);
         scanf("%*[^\n]");
         printf("No de telefone do restaurante:");
         scanf("%s", &resta->telefone);
         scanf("%*[^\n]");
         printf("Observacoes sobre o restaurante:");
         scanf("%s", &resta->observacoes);
         scanf("%*[^\n]");
         printf("Coordenada X, seguida de Y do restaurante:");
         do {
            printf("\nX:");
            i=scanf("%d", &resta->coordenadas.x);
            scanf("%*[^\n]");
            }while (i!=1);
         do {
            printf("\nY:");
            i=scanf("%d", &resta->coordenadas.y);
            scanf("%*[^\n]");
            }while (i!=1);
         printf("Dia de descanso do restaurante:\n");
         printf("1=Domingo; 2=Segunda-Feira; 3=Terca-Feira; 4=Quarta-Feira; 5=Quinta-Feira; 6=Sexta-Feira; 7=Sabado.\n");
         do {
            printf("Dia:");
            i=scanf("%d", &resta->dia_descanso);
            scanf("%*[^\n]");
            }while (i!=1 || resta->dia_descanso<1 || resta->dia_descanso>7);
         printf("Ferias do restaurante: (MM/DD)");
         printf("\nMes seguido do Dia do ínicio das ferias:");
         do {
            printf("\nMes:");
            i=scanf("%d", &resta->inicio_ferias.mes);
            scanf("%*[^\n]");
            }while (i!=1 || resta->inicio_ferias.mes<1 || resta->inicio_ferias.mes>12);
         diames=testames(resta->inicio_ferias.mes); /*testa se o mes tem 29, 30 ou 31 dias (Consideramos que 
         fevereiro tem sempre 28, uma vez que nao usamos anos*/
         do {
            printf("\nDia:");
            i=scanf("%d", &resta->inicio_ferias.dia);
            scanf("%*[^\n]");
            }while (i!=1 || resta->inicio_ferias.dia<1 || resta->inicio_ferias.dia>diames);
            
         printf("Mes seguido do Dia do Fim das ferias:");
         do {
            printf("\nMes:");
            i=scanf("%d", &resta->fim_ferias.mes);
            scanf("%*[^\n]");
            }while (i!=1 || resta->fim_ferias.mes<1 || resta->fim_ferias.mes>12);
         diames=testames(resta->fim_ferias.mes); /*testa se o mes tem 29, 30 ou 31 dias (Consideramos que 
         fevereiro tem sempre 28, uma vez que nao usamos anos*/
         do {
            printf("Dia:");
            i=scanf("%d", &resta->fim_ferias.dia);
            scanf("%*[^\n]");
            }while (i!=1 || resta->fim_ferias.dia<1 || resta->fim_ferias.dia>diames);
            return resta[1];
         }
    char imprime_restaurante(Restaurante *rest) {
                printf("\nNome: %s", rest->nome);
                printf("\nMorada: %s", rest->morada);
                printf("\nE-Mail: %s", rest->email);
                printf("\nTipo de Comida: %s", rest->comida);
                printf("\nNumero de Telefone: %s", rest->telefone);
                printf("\nObservações: %s", rest->observacoes);
                printf("\nCoordenadas: %d,%d", rest->coordenadas.x, rest->coordenadas.y);
                switch (rest->dia_descanso) {
                       case 1: printf("\nDia de descanso semanal: Domingo"); break;
                       case 2: printf("\nDia de descanso semanal: Segunda-Feira"); break;
                       case 3: printf("\nDia de descanso semanal: Terça-Feira"); break;
                       case 4: printf("\nDia de descanso semanal: Quarta-Feira"); break;
                       case 5: printf("\nDia de descanso semanal: Quinta-Feira"); break;
                       case 6: printf("\nDia de descanso semanal: Sexta-Feira"); break;
                       case 7: printf("\nDia de descanso semanal: Sábado"); break;
                       default: printf("\n\nErro na leitura do dia de descanso!\n\n"); break;
                       }
                printf("\nInicio das ferias: %d/%d", rest->inicio_ferias.dia, rest->inicio_ferias.mes);
                printf("\nFim das ferias: %d/%d\n", rest->fim_ferias.dia, rest->fim_ferias.mes);
                
                }
                
    int main() {
        Restaurante rest;
        int i=1,k;
        Menu:
        printf("MENU\n");
        printf("1)Adicionar restaurante\n");
        printf("2)Ler lista de restaurantes\n");
        do {
        i=scanf("%d",&k);
        scanf("%*[^\n]");
        } while(i!=1);
        switch (k) {
               case 1: {criarrestaurante(&rest); break; }
               case 2: break;
               default: { printf("Opção inválida!"); goto Menu; }
               }
        List aux=cria_lista();
        fputrestaurante(&rest);
        imprime_restaurante(&rest);
        system("PAUSE");
    }

  2. #2
    Registered User
    Join Date
    Mar 2008
    Posts
    34
    and the file data.dat comes with chinese characters...

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. No clue how to make a code to solve problems!
    By ctnzn in forum C Programming
    Replies: 8
    Last Post: 10-16-2008, 02:59 AM
  2. problems with structures and linked lists
    By jwillisoa in forum C Programming
    Replies: 7
    Last Post: 07-01-2007, 05:23 PM
  3. C Pointers Problems
    By mhelal in forum C Programming
    Replies: 8
    Last Post: 01-10-2007, 06:35 AM
  4. String Manipulation problems -_-
    By Astra in forum C Programming
    Replies: 5
    Last Post: 12-13-2006, 05:48 PM
  5. eof in fstream & singly linked lists
    By mazo in forum C++ Programming
    Replies: 3
    Last Post: 06-03-2002, 09:50 AM