alphasil Posted July 12, 2012 at 03:14 PM Report #468491 Posted July 12, 2012 at 03:14 PM Oi Tenho um array assim definido char matriculas[MAX][20] e pedem-me para escrever num ficheiro txt aqueles que começam por "AB" ponho isto mas tenho um erro. int imprimeFic(char matriculas[][20]) { FILE *f; int i; f=fopen("matriculasAB.txt", "w"); if(!f) { printf("Erro no ficheiro..."); return -1; } for(i=0; i<MAX; i++) { if((char*)matriculas[i]=='AB') { fprintf(f,"%s", (char*)matriculas[i]); } else { printf("Nada a escrever"); } } return 0; } D:\2012\c_exe\Ordenar Decrescente\main.c||In function 'imprimeFic':| D:\2012\c_exe\Ordenar Decrescente\main.c|46|warning: multi-character character constant [-Wmultichar]| D:\2012\c_exe\Ordenar Decrescente\main.c|46|warning: comparison between pointer and integer [enabled by default]| ||=== Build finished: 0 errors, 2 warnings ===| ??? gmc11
pikax Posted July 12, 2012 at 03:23 PM Report #468492 Posted July 12, 2012 at 03:23 PM (edited) C nao suporta comparacao de strings //if((char*)matriculas[i]=='AB') // ERRADO!!! if(strcmp(matriculas,"AB")) EDIT: nao suporta comparacao com o operador == Edited July 12, 2012 at 03:23 PM by pikax Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
alphasil Posted July 12, 2012 at 03:29 PM Author Report #468493 Posted July 12, 2012 at 03:29 PM iiiiiiiiiii, que cepo eu sou....nem me lembrei dessa!!! gmc11
pmg Posted July 12, 2012 at 05:50 PM Report #468498 Posted July 12, 2012 at 05:50 PM (edited) D:\2012\c_exe\Ordenar Decrescente\main.c|46|warning: multi-character character constant [-Wmultichar]| As strings sao delimitads por aspas ("string"); os caracteres sao delimitados por plicas ('c'). Em C é possivel ter caracteres com mais de um elemento ("multi-character character constant") mas isso normalmente indica um engano por parte do programador, por isso o compilador avisou-te com um warning. D:\2012\c_exe\Ordenar Decrescente\main.c|46|warning: comparison between pointer and integer [enabled by default]| Ja te explicaram como resolver este warning ... mas para ficar o post mais completo, deixo aqui o motivo e explicacao do warning. Na condicao ((char*)matriculas[j] == 'AB') estas a comparar um ponteiro (o resultado do cast) com um inteiro (o valor da constante multi-caracter). Ora esses dois tipos nao sao directamente comparaveis, por isso o compilador te deu o warning. Nota que sem o cast, o tipo de matriculas[j] é automaticamente convertido para char *, por isso o cast é redundante (e so atraplha). Edited July 12, 2012 at 06:58 PM by pmg 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!
HappyHippyHippo Posted July 12, 2012 at 06:53 PM Report #468508 Posted July 12, 2012 at 06:53 PM alphasil, a tua dedicação em tentar evoluir é de louvar, mas já reparaste que todos os últimos posts que fizeste não foram por não saberes a solução, mas por pura distração, certo ? 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