xtrm0 Posted July 18, 2012 at 02:22 AM Report #469090 Posted July 18, 2012 at 02:22 AM (edited) Boas, estava a tentar fazer uma função para ler uns mapas de um ficheiro, mas está-me a dar um erro que não consigo entender. O erro é: error c2143: missing ';' before 'type'. Código: while(fscanf(fr,"%s",szfinputz)!=EOF) { if (strcmp(szfinputz,"@name")==0) { fscanf(fr," %[^\n]\n",app.map.name); //ignora espacos, le uma string até ao final da linha e ignora o final da linha } else if (strcmp(szfinputz,"@author")==0) { fscanf(fr," %[^\n]\n",app.map.author); //ignora espacos, le uma string até ao final da linha e ignora o final da linha } else if (strcmp(szfinputz,"@dim")==0) { fscanf(fr," %i %i\n", &app.map.width, &app.map.height); //ignora espacos, le um int, ignora espacos, le um int e ignora o final da linha } else if (strcmp(szfinputz,"@start")==0) { fscanf(fr," %i %i\n", &app.map.start.x, &app.map.start.y); //ignora espacos, le um int, ignora espacos, le um int e ignora o final da linha } else if (strcmp(szfinputz,"@portal")==0) { fscanf(fr," %i %i", &ntmp1, &ntmp2); //ignora espacos, le um int, ignora espacos, le um int e ignora o fim da linha fscanf(fr," %i", &app.map.map[ntmp1][ntmp2].event.x); //ignora espacos, le um int fscanf(fr," %i\n", &app.map.map[ntmp1][ntmp2].event.y); //ignora espacos, le um int e ignora o final da linha } else if (strcmp(szfinputz,"@end")==0) { fscanf(fr,"%i %i\n", &app.map.end.x, &app.map.end.y); //ignora espacos, le um int, ignora espacos, le um int e ignora o fim da linha } else if (strcmp(szfinputz,"@map")==0) { for (unsigned y=0; y< app.map.height; y++) { for (unsigned x=0; x < app.map.width ; x++) { chtmp = fgetc(fr); while (chtmp=='\n') { printf("excepcao: papMapLoadFromFile, chtmp='\\n'\n"); chtmp = fgetc(fr); } pmptmp.type = chtmp; app.map.map[x][y] = pmptmp; } chtmp = fgetc(fr); } } } Já tentei compilar o projeto sem esta parte do programa e funciona sem erros. Ao incluir isto, dá-me errp que descrevi acima, mas tenho quase a certeza que não me falta nenhum ';' ou ')'. Tenho tambem a dúvida de que se as regular expressions estão certas ou não. Edited July 18, 2012 at 12:40 PM by xtrm0 <Signature goes here>
brunoais Posted July 18, 2012 at 06:53 AM Report #469094 Posted July 18, 2012 at 06:53 AM Boas, estava a tentar fazer uma função para ler uns mapas de um ficheiro, mas está-me a dar um erro que não consigo entender. O erro é: error c2143: missing ';' before 'type'. Isso é em compile time? 2143 parece ser a linha. Aonde é que está esse linha? Tenho tambem a dúvida de que se as regular expressions estão certas ou não. regular expressions ? onde? "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
Baderous Posted July 18, 2012 at 07:34 AM Report #469095 Posted July 18, 2012 at 07:34 AM regular expressions ? onde? Nos fscanf.
HappyHippyHippo Posted July 18, 2012 at 08:08 AM Report #469099 Posted July 18, 2012 at 08:08 AM estou a reconhecer alguma coisa nesse código. estou a ver que visto o pikax se ter voluntariado para o fazer e nunc mais ter aparecido, alguém decidiu fazer. este fim de semana tive o aniversário da minha filha, vou ver se acabo o resto até ao fim de semana IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
pmg Posted July 18, 2012 at 08:23 AM Report #469100 Posted July 18, 2012 at 08:23 AM for (unsigned y=0; y< app.map.height; y++) { for (unsigned x=0; x < app.map.width ; x++) { chtmp = fgetc(fr); while (chtmp=='\n') { printf("excepcao: papMapLoadFromFile, chtmp='\\n'\n"); chtmp = fgetc(fr); } pmptmp.type = chtmp; app.map.map[x][y] = pmptmp; } chtmp = fgetc(fr); } Então mas o teu programa é C (o quadro em que escolheste por a tua questão) ou é C++ (a linguagem que escolheste meter para o código)? Se é C++ ignora a minha resposta (eu não sei C++) e pede a um moderador (posso ser eu) para mudar o tópico de quadro; se é C talvez queiras mudar a linguagem do código 🙂 A versão C de 1989 (aquela que o compilador Microsoft Visual Studio aceita) não reconhece a declaração de variaveis "dentro" do for. Passa a definição do x e y para fora: unsigned y; // y definido fora do for for (y=0; y< app.map.height; y++) { unsigned x; // x definido fora do for for (x=0; x < app.map.width ; x++) { chtmp = fgetc(fr); while (chtmp=='\n') { printf("excepcao: papMapLoadFromFile, chtmp='\\n'\n"); chtmp = fgetc(fr); } pmptmp.type = chtmp; app.map.map[x][y] = pmptmp; } chtmp = fgetc(fr); } What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Flinger Posted July 18, 2012 at 10:50 AM Report #469122 Posted July 18, 2012 at 10:50 AM (edited) xtrm0, vê as declarações no header. Erros no header podem ser reflectidas no código durante a compilação. PS: Se quiseres envia-me o código que eu faço upload para o svn e vemos isso. Edited July 18, 2012 at 10:50 AM by Flinger
HappyHippyHippo Posted July 18, 2012 at 11:21 AM Report #469132 Posted July 18, 2012 at 11:21 AM (edited) já agora tenho uma sugestão para "limpar" o código typedef struct { char name[32]; int (*func)(papApp *, char *, FILE *); } MapEntry; // o argumento file está aqui para o caso da entrada @map // visto que esta entrada requere a leitura das linhas seguintes int readAuthor(papApp * app, char * line, FILE * file) { // ... } int readMap(char * file) { MapEntry entries[1]; // alterar para o número de entradas possíveis FILE * file = NULL; char line[256]; int i = 0, found = 0; memset(entries, 0, sizeof(entries)); // adicionar as entradas necessárias strcpy(entries[0].name, "@author"); entries[0].func = readAuthor; // ... // abertura do ficheiro e ciclo de leitura // ... { // leitura da linha fgets(line, 256, file); // interpretar a linha found = 0; for(i = 0; i <= 1 && !found; i++) // alterar para o número de entradas { if (strstr(line, entries[i].name) == line) { entries[i].func(app, line, file); found = 1; } } } // fecho do ficheiro // ... } acho que alem de ficar mais legível o código é bem mais fácil adicionar tipos de entradas Edited July 18, 2012 at 11:23 AM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
xtrm0 Posted July 18, 2012 at 12:38 PM Author Report #469150 Posted July 18, 2012 at 12:38 PM (edited) Obrigado pela ajuda. O problema era mesmo estar a declarar os unigned's dentro do for. @happyhippyhippo, ache que não vale a pena estar a adicionar uma função para cada entrada no mapa, visto que assim estariamos a por em 200 linhas de código o que cabe em 50. @Flinger, a função para carregar os mapas já está a funcionar como deve de ser. Se quiseres adicionar ao svn: https://www.dropbox.com/s/rz7kswddt8iykad/labirinto.zip Alterações feitas: Adicionei dois erros novos ao errors.h (erros relacionados com a escrita e leitura em ficheiros) Adicionei algumas linhas ao papMapClear(para limpar os teletransportes) e comentei outras que davam erro de compilação. Acabei a função papMapLoadFromFIle. No main.h adicionei os includes das bibliotecas como pragma comment(lib,"biblioteca.lib"), e adicionei um comment para funcionar com VS (#ifdef _WIN32 #undef main #endif) Edited July 18, 2012 at 12:38 PM by xtrm0 <Signature goes here>
HappyHippyHippo Posted July 18, 2012 at 12:51 PM Report #469152 Posted July 18, 2012 at 12:51 PM @happyhippyhippo, ache que não vale a pena estar a adicionar uma função para cada entrada no mapa, visto que assim estariamos a por em 200 linhas de código o que cabe em 50. a minha sugestão era para facilitar a adição de novos elementos do mapa, no entanto cada um é livre de implementar o como bem lhe entender (desde que funcione claro) Adicionei algumas linhas ao papMapClear(para limpar os teletransportes) e comentei outras que davam erro de compilação. estranho ... eu tenho essa função a compilar corretamente. No main.h adicionei os includes das bibliotecas como pragma comment(lib,"biblioteca.lib") não tenho a certeza mas acho que esse modelo de inclusão de bibliotecas é VS only ... meteste dentro de "#ifdef _MSC_VER" ?? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
xtrm0 Posted July 18, 2012 at 01:44 PM Author Report #469159 Posted July 18, 2012 at 01:44 PM Citação No main.h adicionei os includes das bibliotecas como pragma comment(lib,"biblioteca.lib") não tenho a certeza mas acho que esse modelo de inclusão de bibliotecas é VS only ... meteste dentro de "#ifdef _MSC_VER" ?? Não tinha posto ainda. Vou por agora. Citação Adicionei algumas linhas ao papMapClear(para limpar os teletransportes) e comentei outras que davam erro de compilação. estranho ... eu tenho essa função a compilar corretamente. O erro estava aqui: // limpar a informacao dos itens do mapa /*for (iter_x = 0; iter_x < PAPGAMES_MAP_MAX_ITEMS; iter_x++) { app.map.items[iter_x].type = 0; app.map.items[iter_x].pos.x = 0; app.map.items[iter_x].pos.y = 0; app.map.items[iter_x].event.x = 0; app.map.items[iter_x].event.y = 0; }*/ Acho que depois alteraste o mapa para cada papMapPos guardar as informações dos items e te esqueceste de tirar isto. <Signature goes here>
Flinger Posted July 18, 2012 at 01:49 PM Report #469162 Posted July 18, 2012 at 01:49 PM (edited) @Hippo: Deves-te ter esquecido de actualizar o map.h Não existe a constante PAPGAMES_MAP_MAX_ITEMS nem o membro items da estrutura papMap Edited July 18, 2012 at 01:49 PM by Flinger
HappyHippyHippo Posted July 18, 2012 at 01:58 PM Report #469163 Posted July 18, 2012 at 01:58 PM Acho que depois alteraste o mapa para cada papMapPos guardar as informações dos items e te esqueceste de tirar isto. bem capaz ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now