1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Problemas e duvidas com um programa em C

Discussão em 'Programação' iniciada por gryphus1, 28 de Junho de 2007. (Respostas: 11; Visualizações: 1514)

  1. Boas.

    Construi um programa de gestão de quartos de um hotel em C, que basicamente trabalha com uma matriz de elementos (quartos). Depois cada quarto tem alguns campos onde se guarda o seu preço, o seu numero e letra, e um possivel nome associado à sua reserva ou venda.

    Implementei isto tudo da forma mais simples, usei o malloc(sizeof(struc ... )) para criar os quartos e a tabela de quartos e inicializei tudo direitinho...

    Compila sem erros nem warnings.

    Mas quando vou a executar em modo without debuging, o programa crasha depois da função de criação da tabela dos quartos se completar. De salientar que essa função newTableRooms também chama a função newRoom, que serve para criar cada quarto individual.
    Heis uma imagem do erro que aparece:

    [​IMG]

    Ah e se tento ignorar o erro depois aparece este:

    [​IMG]

    Se deixo como está e executo em Debug mode, ele executa normalmente e não crasha uma única vez...


    Para ser mais preciso, ele em without debuging executava o programa ate ao final desta função e depois crashava com os erros anteriores:


    Código:
    tRoom newSingleRoom(int l, char c,float p){
        tRoom r;    
        r=(tRoom)malloc(sizeof(struct Rooms));
        r->number=l;
        r->letter=toupper(c);
        r->price=p;
        r->nameForRoom=newName();    
        return r;
    }
    Ah e a pequena função "newName" está aki:


    Código:
    nPT newName(){
        nPT n;
        n=(nPT)malloc(sizeof(struct Names));        
        return n;
    }
    Já sei mais detalhes sobre o erro, ele acontece nesta função, e o erro refere-se à linha a vermelho...


    Código:
    void configTableRooms(char* filename, tTable t){
        FILE *file;
        int line;
        float price;
        char colunn;
        char phrase[13];
        char info[13];        
        [COLOR=red]file=fopen(filename, "r");[/COLOR]
        if (file==NULL)
            printf("Error found while reading from the Config.txt.\n");
        else{
            while (!feof(file)){            
                fgets(phrase, 13, file);
                strcpy(info,strtok(phrase, " "));
                sscanf(info, "%d%c",&line,&colunn);                
                strcpy(info,strtok(NULL, "\n"));
                sscanf(info, "%f",&price);                
                t->room[line][index(colunn)]=newSingleRoom(line,colunn,price);            
            }
            fclose(file);
        }
    }
    Código:
    typedef struct Names{
        char Name[50];
    } [COLOR=RED]*nPT;[/COLOR]
    
    
    typedef struct Rooms{
        int number;
        char letter;
        float price;
        [COLOR=RED]nPT nameForRoom;[/COLOR]        
        enum situations situationRoom;
    };
    É assim que tenho as estruturas. O "nPT" passeio-o como apontador para a estrutura Names, só tenho dúvida se devo passar o campo "nameForRoom" também como um apontador para "nPT". Se o faço recebo alguns warnings.



    Heis o erro da linha a vermelho:

    [​IMG]

    Não aparece mais nenhuma output window. Se fizer break ele pára ali, se fizer continue ele continua a executar.



    O que poderá ser?? Há horas que estou de volta disto e nao descubro...
     
    Última edição: 28 de Junho de 2007
  2. mokojin

    mokojin Power Member

    Código:
    typedef struct Names{
        char Name[50];
    } [COLOR=RED]*nPT;[/COLOR]
    Aqui já estas a definir como pointer, logo se na outra estrutura puseres um *, significa que é um duplo pointer, e provavelmente por isso te dar problemas de warning's.

    Relativamente aos erros do visual studio, não percebo porque só te acontece em modo debug, mas esse tipo de erros normalmente acontece com problemas de gestão de memória.

    Já agora aqui:
    tRoom newSingleRoom(int l, char c,float p)
    O que é o tRoom? não deverias estar a devolver um pointer para a zona de memória que acabaste de alocar?
     
  3. Baderous

    Baderous Banido

    Bem, eu testei esse código e apareceu-me logo um erro no
    Código:
    enum situations situationRoom;
    Deve ter sido algum tipo que definiste e que não colocaste aqui.

    Depois deu-me erro no tRoom. Não reconhece o tipo. E realmente, acho que não há nenhuma declaração de tRoom. Se calhar o que tu querias é que tRoom fosse um apontador para a struct Rooms. Ou seja, ficaria algo do género:
    Código:
    typedef struct Rooms{
        int number;
        char letter;
        float price;
        nPT nameForRoom;        
        enum situations situationRoom;
    }*tRoom;
    Vê lá se já consegues arranjar isso agora.

    O resto dos erros é na função configTableRooms.
     
    Última edição: 28 de Junho de 2007
  4. Ficheiro room.h:

    Código:
    #ifndef _H_room
    #define _H_room
    
    
    typedef struct Rooms *tRoom;
    
    tRoom newSingleRoom(int,char,float);
    ...
    
    foi assim que defini o tipo tRoom, como apontador para a estrutura Rooms
     
  5. Baderous

    Baderous Banido

    Colocas o *tRoom depois da declaração da struct que aquilo passa a ser reconhecido como um apontador para a struct. Desta forma nunca dá problemas!
     
    Última edição: 28 de Junho de 2007
  6. Consegui resolver :)

    Uma outra duvida que tenho é se posso adicionar cores ao programa ... ? Isto é, mudar as cores das letras que aparecem na janela preta.
     
  7. Baderous

    Baderous Banido

    Podes. Acho que tens de fazer
    Código:
    #include <windows.h>
    mas não sei como se utiliza.

    EDIT: Encontrei este código noutro fórum:
    Código:
    [COLOR=#339933]#include "stdio.h"[/COLOR]
    [COLOR=#339933]#include "conio.h"[/COLOR]
    [COLOR=#339933]#include "windows.h"[/COLOR]
     
     
    [COLOR=#993333]void[/COLOR] setrgb[COLOR=#66cc66]([/COLOR][COLOR=#993333]int[/COLOR] color[COLOR=#66cc66])[/COLOR]
    [COLOR=#66cc66]{[/COLOR]
      [COLOR=#b1b100]switch[/COLOR] [COLOR=#66cc66]([/COLOR]color[COLOR=#66cc66])[/COLOR]
      [COLOR=#66cc66]{[/COLOR]
      [COLOR=#b1b100]case[/COLOR] [COLOR=#cc66cc]0[/COLOR]:    [COLOR=#808080][I]// Branco sobre Preto[/I][/COLOR]
        SetConsoleTextAttribute[COLOR=#66cc66]([/COLOR]GetStdHandle[COLOR=#66cc66]([/COLOR]STD_OUTPUT_HANDLE[COLOR=#66cc66])[/COLOR],
                            FOREGROUND_INTENSITY | FOREGROUND_RED |
                            FOREGROUND_GREEN | FOREGROUND_BLUE[COLOR=#66cc66])[/COLOR];
        [COLOR=#000000][B]break[/B][/COLOR];
      [COLOR=#b1b100]case[/COLOR] [COLOR=#cc66cc]1[/COLOR]:    [COLOR=#808080][I]// Vermelho sobre Preto[/I][/COLOR]
        SetConsoleTextAttribute[COLOR=#66cc66]([/COLOR]GetStdHandle[COLOR=#66cc66]([/COLOR]STD_OUTPUT_HANDLE[COLOR=#66cc66])[/COLOR],
                             FOREGROUND_INTENSITY | FOREGROUND_RED[COLOR=#66cc66])[/COLOR];
        [COLOR=#000000][B]break[/B][/COLOR];
      [COLOR=#b1b100]case[/COLOR] [COLOR=#cc66cc]2[/COLOR]:    [COLOR=#808080][I]// Verde sobre Preto[/I][/COLOR]
        SetConsoleTextAttribute[COLOR=#66cc66]([/COLOR]GetStdHandle[COLOR=#66cc66]([/COLOR]STD_OUTPUT_HANDLE[COLOR=#66cc66])[/COLOR],
                          FOREGROUND_INTENSITY | FOREGROUND_GREEN[COLOR=#66cc66])[/COLOR];
        [COLOR=#000000][B]break[/B][/COLOR];
      [COLOR=#b1b100]case[/COLOR] [COLOR=#cc66cc]3[/COLOR]:    [COLOR=#808080][I]// Amarelo sobre Preto[/I][/COLOR]
        SetConsoleTextAttribute[COLOR=#66cc66]([/COLOR]GetStdHandle[COLOR=#66cc66]([/COLOR]STD_OUTPUT_HANDLE[COLOR=#66cc66])[/COLOR],
                          FOREGROUND_INTENSITY | FOREGROUND_RED |
                          FOREGROUND_GREEN[COLOR=#66cc66])[/COLOR];
        [COLOR=#000000][B]break[/B][/COLOR];
      [COLOR=#b1b100]case[/COLOR] [COLOR=#cc66cc]4[/COLOR]:    [COLOR=#808080][I]// Azul sobre Preto[/I][/COLOR]
        SetConsoleTextAttribute[COLOR=#66cc66]([/COLOR]GetStdHandle[COLOR=#66cc66]([/COLOR]STD_OUTPUT_HANDLE[COLOR=#66cc66])[/COLOR],
                          FOREGROUND_INTENSITY | FOREGROUND_BLUE[COLOR=#66cc66])[/COLOR];
        [COLOR=#000000][B]break[/B][/COLOR];
      [COLOR=#b1b100]case[/COLOR] [COLOR=#cc66cc]5[/COLOR]:    [COLOR=#808080][I]// Magenta sobre Preto[/I][/COLOR]
        SetConsoleTextAttribute[COLOR=#66cc66]([/COLOR]GetStdHandle[COLOR=#66cc66]([/COLOR]STD_OUTPUT_HANDLE[COLOR=#66cc66])[/COLOR],
                         FOREGROUND_INTENSITY | FOREGROUND_RED |
                         FOREGROUND_BLUE[COLOR=#66cc66])[/COLOR];
        [COLOR=#000000][B]break[/B][/COLOR];
      [COLOR=#b1b100]case[/COLOR] [COLOR=#cc66cc]6[/COLOR]:    [COLOR=#808080][I]// Cyan sobre Preto[/I][/COLOR]
        SetConsoleTextAttribute[COLOR=#66cc66]([/COLOR]GetStdHandle[COLOR=#66cc66]([/COLOR]STD_OUTPUT_HANDLE[COLOR=#66cc66])[/COLOR],
                        FOREGROUND_INTENSITY | FOREGROUND_GREEN |
                        FOREGROUND_BLUE[COLOR=#66cc66])[/COLOR];
        [COLOR=#000000][B]break[/B][/COLOR];
      [COLOR=#b1b100]case[/COLOR] [COLOR=#cc66cc]7[/COLOR]:    [COLOR=#808080][I]// Preto sobre Cinza[/I][/COLOR]
        SetConsoleTextAttribute[COLOR=#66cc66]([/COLOR]GetStdHandle[COLOR=#66cc66]([/COLOR]STD_OUTPUT_HANDLE[COLOR=#66cc66])[/COLOR],
                      BACKGROUND_INTENSITY | BACKGROUND_INTENSITY[COLOR=#66cc66])[/COLOR];
        [COLOR=#000000][B]break[/B][/COLOR];
      [COLOR=#b1b100]case[/COLOR] [COLOR=#cc66cc]8[/COLOR]:    [COLOR=#808080][I]// Preto sobre Branco[/I][/COLOR]
        SetConsoleTextAttribute[COLOR=#66cc66]([/COLOR]GetStdHandle[COLOR=#66cc66]([/COLOR]STD_OUTPUT_HANDLE[COLOR=#66cc66])[/COLOR],
                      BACKGROUND_INTENSITY | FOREGROUND_INTENSITY |
                      BACKGROUND_RED | BACKGROUND_GREEN |
                      BACKGROUND_BLUE[COLOR=#66cc66])[/COLOR];
        [COLOR=#000000][B]break[/B][/COLOR];
      [COLOR=#b1b100]case[/COLOR] [COLOR=#cc66cc]9[/COLOR]:    [COLOR=#808080][I]// Vermelho sobre Branco[/I][/COLOR]
        SetConsoleTextAttribute[COLOR=#66cc66]([/COLOR]GetStdHandle[COLOR=#66cc66]([/COLOR]STD_OUTPUT_HANDLE[COLOR=#66cc66])[/COLOR],
                      BACKGROUND_INTENSITY | FOREGROUND_INTENSITY |
                      BACKGROUND_RED | BACKGROUND_GREEN |
                      BACKGROUND_BLUE |
          FOREGROUND_RED[COLOR=#66cc66])[/COLOR];
        [COLOR=#000000][B]break[/B][/COLOR];
      [COLOR=#b1b100]case[/COLOR] [COLOR=#cc66cc]10[/COLOR]:    [COLOR=#808080][I]// Verde sobre Branco[/I][/COLOR]
        SetConsoleTextAttribute[COLOR=#66cc66]([/COLOR]GetStdHandle[COLOR=#66cc66]([/COLOR]STD_OUTPUT_HANDLE[COLOR=#66cc66])[/COLOR],
                     BACKGROUND_INTENSITY | FOREGROUND_INTENSITY |
                     BACKGROUND_RED | BACKGROUND_GREEN |
                     BACKGROUND_BLUE | FOREGROUND_GREEN[COLOR=#66cc66])[/COLOR];
        [COLOR=#000000][B]break[/B][/COLOR];
      [COLOR=#b1b100]case[/COLOR] [COLOR=#cc66cc]11[/COLOR]:    [COLOR=#808080][I]// Amarelo sobre Branco[/I][/COLOR]
        SetConsoleTextAttribute[COLOR=#66cc66]([/COLOR]GetStdHandle[COLOR=#66cc66]([/COLOR]STD_OUTPUT_HANDLE[COLOR=#66cc66])[/COLOR],
                     BACKGROUND_INTENSITY | FOREGROUND_INTENSITY |
                     BACKGROUND_RED | BACKGROUND_GREEN |
                     BACKGROUND_BLUE | FOREGROUND_RED |
                     FOREGROUND_GREEN[COLOR=#66cc66])[/COLOR];
        [COLOR=#000000][B]break[/B][/COLOR];
      [COLOR=#b1b100]case[/COLOR] [COLOR=#cc66cc]12[/COLOR]:    [COLOR=#808080][I]// Azul sobre Branco[/I][/COLOR]
        SetConsoleTextAttribute[COLOR=#66cc66]([/COLOR]GetStdHandle[COLOR=#66cc66]([/COLOR]STD_OUTPUT_HANDLE[COLOR=#66cc66])[/COLOR],
                     BACKGROUND_INTENSITY | FOREGROUND_INTENSITY |
                     BACKGROUND_RED | BACKGROUND_GREEN |
                     BACKGROUND_BLUE | FOREGROUND_BLUE[COLOR=#66cc66])[/COLOR];
        [COLOR=#000000][B]break[/B][/COLOR];
      [COLOR=#b1b100]case[/COLOR] [COLOR=#cc66cc]13[/COLOR]:    [COLOR=#808080][I]// Magenta sobre Branco[/I][/COLOR]
        SetConsoleTextAttribute[COLOR=#66cc66]([/COLOR]GetStdHandle[COLOR=#66cc66]([/COLOR]STD_OUTPUT_HANDLE[COLOR=#66cc66])[/COLOR],
                     BACKGROUND_INTENSITY | FOREGROUND_INTENSITY |
                     BACKGROUND_RED | BACKGROUND_GREEN |
                     BACKGROUND_BLUE | FOREGROUND_RED |
                     FOREGROUND_BLUE[COLOR=#66cc66])[/COLOR];
        [COLOR=#000000][B]break[/B][/COLOR];
      [COLOR=#b1b100]case[/COLOR] [COLOR=#cc66cc]14[/COLOR]:    [COLOR=#808080][I]// Cyan sobre Branco[/I][/COLOR]
        SetConsoleTextAttribute[COLOR=#66cc66]([/COLOR]GetStdHandle[COLOR=#66cc66]([/COLOR]STD_OUTPUT_HANDLE[COLOR=#66cc66])[/COLOR],
                     BACKGROUND_INTENSITY | FOREGROUND_INTENSITY |
                     BACKGROUND_RED | BACKGROUND_GREEN |
                     BACKGROUND_BLUE | FOREGROUND_GREEN |
                     FOREGROUND_BLUE[COLOR=#66cc66])[/COLOR];
        [COLOR=#000000][B]break[/B][/COLOR];
      [COLOR=#b1b100]case[/COLOR] [COLOR=#cc66cc]15[/COLOR]:    [COLOR=#808080][I]// Branco sobre Branco[/I][/COLOR]
        SetConsoleTextAttribute[COLOR=#66cc66]([/COLOR]GetStdHandle[COLOR=#66cc66]([/COLOR]STD_OUTPUT_HANDLE[COLOR=#66cc66])[/COLOR],
                    BACKGROUND_INTENSITY | FOREGROUND_INTENSITY |
                    BACKGROUND_RED | BACKGROUND_GREEN |
                    BACKGROUND_BLUE | FOREGROUND_RED |
                    FOREGROUND_GREEN | FOREGROUND_BLUE[COLOR=#66cc66])[/COLOR];
        [COLOR=#000000][B]break[/B][/COLOR];
      [COLOR=#b1b100]default[/COLOR] :    [COLOR=#808080][I]// Branco sobre Preto[/I][/COLOR]
        SetConsoleTextAttribute[COLOR=#66cc66]([/COLOR]GetStdHandle[COLOR=#66cc66]([/COLOR]STD_OUTPUT_HANDLE[COLOR=#66cc66])[/COLOR],
                    FOREGROUND_INTENSITY | FOREGROUND_RED |
                    FOREGROUND_GREEN | FOREGROUND_BLUE[COLOR=#66cc66])[/COLOR];
        [COLOR=#000000][B]break[/B][/COLOR];
      [COLOR=#66cc66]}[/COLOR]
    [COLOR=#66cc66]}[/COLOR]
    [COLOR=#993333]int[/COLOR] main[COLOR=#66cc66]([/COLOR][COLOR=#66cc66])[/COLOR]
    [COLOR=#66cc66]{[/COLOR]
    setrgb[COLOR=#66cc66]([/COLOR][COLOR=#cc66cc]1[/COLOR][COLOR=#66cc66])[/COLOR];
    [URL="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"][COLOR=#000066]printf[/COLOR][/URL][COLOR=#66cc66]([/COLOR][COLOR=#ff0000]"Cores[COLOR=#000099][B]\n[/B][/COLOR]"[/COLOR][COLOR=#66cc66])[/COLOR];
    getch[COLOR=#66cc66]([/COLOR][COLOR=#66cc66])[/COLOR];
    setrgb[COLOR=#66cc66]([/COLOR][COLOR=#cc66cc]0[/COLOR][COLOR=#66cc66])[/COLOR];
    [URL="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"][COLOR=#000066]printf[/COLOR][/URL][COLOR=#66cc66]([/COLOR][COLOR=#ff0000]"Cores[COLOR=#000099][B]\n[/B][/COLOR]"[/COLOR][COLOR=#66cc66])[/COLOR];
    getch[COLOR=#66cc66]([/COLOR][COLOR=#66cc66])[/COLOR];
     
    [COLOR=#66cc66]}
    [/COLOR]


    (Não sei se estou a ir contra alguma regra)
     
    Última edição: 28 de Junho de 2007
  8. Código:
    #include "windows.h"
    visual studio 2005\projects\hotel manager 2008\hotel manager 2008\color.c(4) : fatal error C1083: Cannot open include file: 'windows.h': No such file or directory

    Onde está esse ficheiro?
     
  9. Baderous

    Baderous Banido

    Não sei como isso funciona no Visual Studio. Eu uso Dev-C++.
     
  10. Mas deve de existir um ficheiro header chamado windows.h algures....

    Alguem consegue usar isto?
     
  11. Baderous

    Baderous Banido

    Encontrei isto.
    Pode ser que ajude...
     
  12. Essa linha eu tenho na lista.. :S

    Resta-me apenas:

    Onde arranjar essa platform SDK po VSC++2005 Express Edition ??
     

Partilhar esta Página