mcosta Posted April 18, 2012 at 04:37 PM Report #449754 Posted April 18, 2012 at 04:37 PM Olá pessoal desculpem incomodar..no entanto estou a dar os primeiros passos em c..e estou com dificuldades nos arrays!! quero devolver um array mas esta dando erro: #include<stdio.h> #include<stdlib.h> char verifica (float num); main () { char vetor1 [10]; int num; printf ("por favor introduza a idade do nadador"); scanf ("%d", &num); vetor1= verifica (num); printf (" o nadador e do nivel %c\n\n", vetor1); system ("pause"); } char verifica (int num) { char vetor [10]="infantilA"; char vetor2 [10]="infantilB"; if(num>=5 && num<=7) return vetor; if(num>=5 && num<=11) return vetor2; else { printf ("erro ao inserir numero"); } } aguardo ajuda.. grato por tudo!!!
pikax Posted April 18, 2012 at 04:46 PM Report #449756 Posted April 18, 2012 at 04:46 PM primeiro a tua funcao esta' a retornar um char e nao um apontador para um array de char e tens que alocar memoria para ser retornada. mete a main com o tipo inteiro: int main(); e a retornar um valor 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."
mcosta Posted April 18, 2012 at 04:49 PM Author Report #449758 Posted April 18, 2012 at 04:49 PM Olá.. Antes de mais obrigado!! mas basta então colocar int main() e dentro da main um return 0; mas continua com os mesmo erros!!:-(
bsccara Posted April 18, 2012 at 04:58 PM Report #449760 Posted April 18, 2012 at 04:58 PM Tens vários erros no código: 1. As variáveis 'vector' e 'vector2' são locais à função 'verifica', o que significa que após a execução dessa função terminar as mesmas terão um conteúdo desconhecido e devem ser consideradas destruídas. Logo não podes tentar passar ponteiros para elas para fora da função (que não é o que fazes, mas o que tentas). 2. Em C não podes atribuir um array a outro com o operador '='. Tens de copiar o conteúdo dum para o outro, em bloco usando a função 'memcpy' para arrays que não contenham strings ou a função 'strcpy' para arrays contendo strings. 3. Caso uma função retorne algo deves sempre garantir que retornas algo definido, qualquer que seja o ponto de saída da função. Na tua 'verifica' não especificas um valor de retorno no caso de 'num' não estar entre 5 e 11.
mcosta Posted April 18, 2012 at 05:01 PM Author Report #449763 Posted April 18, 2012 at 05:01 PM ok..admito que deve estar tudo mal mas não percebi?? o que devo alterar??podes me ajudar?? grato pela disponibilidade!!
pikax Posted April 18, 2012 at 05:01 PM Report #449765 Posted April 18, 2012 at 05:01 PM tens varios erros ai: #include<stdio.h> #include<stdlib.h> char verifica (float num); //tens que por int, para ser igual 'a implementacao da funcao que esta em baixo //tambem queres retornar um array de chars, entao tens que meter como char* em vez de char main () //tens que ter int main, nao e obrigatorio, mas e' uma boa pratica { char vetor1 [10]; int num; printf ("por favor introduza a idade do nadador"); scanf ("%d", &num); vetor1= verifica (num); //a menos que sejam os 2 apontadores nao podes fazer isto, usa o strcpy printf (" o nadador e do nivel %c\n\n", vetor1); //queres imprimir uma "string" entao tens que meter %s em vez de %c system ("pause"); //tens que returnar da funcao main } char verifica (int num) //mesmo de ali de cima, ja agora tens que indentar melhor o codigo { char vetor [10]="infantilA"; char vetor2 [10]="infantilB"; if(num>=5 && num<=7) return vetor; //estas a retornar um array if(num>=5 && num<=11) return vetor2; else { printf ("erro ao inserir numero"); } } na funcao verifica, tens que criar um apontador e allocar memoria com o malloc e depois retornas esse valor para a main 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."
mcosta Posted April 18, 2012 at 05:02 PM Author Report #449767 Posted April 18, 2012 at 05:02 PM Ok, muito obrigado!! vou tentar já post alguma coisa!! muito obrigado
pikax Posted April 18, 2012 at 05:09 PM Report #449770 Posted April 18, 2012 at 05:09 PM se tiveres com duvida quanto ao malloc, e' algo assim: #include<stdio.h> #include<string.h> char* returnPalavra() { //char palavra[10]="alguma coisa"; //return palavra; //ERRADO!!!! char* pStr; pStr=(char*)malloc(strlen("alguma coisa")); strcpy(pStr,"alguma coisa"); return pStr; } int main () { printf("%s",returnPalavra()); return 1; } 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."
mcosta Posted April 18, 2012 at 05:13 PM Author Report #449772 Posted April 18, 2012 at 05:13 PM ja alterei mas dá na mesma erro:-(( e entretanto,assim como coloquei no strcpy nunca imprime o vetor 2:-(( #include<stdio.h> #include<stdlib.h> #include<string.h> char vetor [10]="infantilA"; char vetor2 [10]="infantilB"; char vetor1 [10]; char* verifica (int num); //tens que por int, para ser igual 'a implementacao da funcao que esta em baixo //tambem queres retornar um array de chars, entao tens que meter como char* em vez de char int main () //tens que ter int main, nao e obrigatorio, mas e' uma boa pratica { int num; printf ("por favor introduza a idade do nadador"); scanf ("%d", &num); strcpy(vetor1, vector); //vetor1= verifica (num); //a menos que sejam os 2 apontadores nao podes fazer isto, usa o strcpy printf (" o nadador e do nivel %s\n\n", vetor1); //queres imprimir uma "string" entao tens que meter %s em vez de %c system ("pause"); return 0;//tens que returnar da funcao main } char* verifica (int num) //mesmo de ali de cima, ja agora tens que indentar melhor o codigo { if(num>=5 && num<=7) return vetor; //estas a retornar um array if(num>=5 && num<=11) return vetor2; else { printf ("erro ao inserir numero"); } } mas também nao funciona
pikax Posted April 18, 2012 at 05:18 PM Report #449773 Posted April 18, 2012 at 05:18 PM Se optares por variaveis globais a logica da funcao muda, porque que nao ficas com um unico vector e quando chamares a funcao verifica() nao mudas so o valor do vector? Se estas a usar variaveis globais nao persisas que a funcao retorne valor nenhum, apenas que mude o valor da var global, ou tambem podes returnar um indice. 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."
pmg Posted April 18, 2012 at 05:19 PM Report #449774 Posted April 18, 2012 at 05:19 PM se tiveres com duvida quanto ao malloc, e' algo assim: #include<stdio.h> #include<string.h> pStr=(char*)malloc(strlen("alguma coisa")); Excepto que o cast é, na melhor das hipóteses, redundante. E pode (como é o caso aqui) esconder um erro para o qual o compilador apontaria se não houvesse cast em primeiro lugar. Em suma: não faças cast ao valor devolvido pelo malloc. 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!
mcosta Posted April 18, 2012 at 05:21 PM Author Report #449775 Posted April 18, 2012 at 05:21 PM Pois!! eu preferia variaveis locais mas da erro por todo o lado!! Com variaveis locais como fica o strpcy?? Mais uma vez obrigado!!
pikax Posted April 18, 2012 at 05:28 PM Report #449776 Posted April 18, 2012 at 05:28 PM Excepto que o cast é, na melhor das hipóteses, redundante. E pode (como é o caso aqui) esconder um erro para o qual o compilador apontaria se não houvesse cast em primeiro lugar. Em suma: não faças cast ao valor devolvido pelo malloc. nao sabia... estou mais habituado aos new de c++ 😛 Pois!! eu preferia variaveis locais mas da erro por todo o lado!! Com variaveis locais como fica o strpcy?? Mais uma vez obrigado!! ve o exemplo que eu pos: #include<stdio.h> #include<stdlib.h> /* malloc */ #include<string.h> char* returnPalavra() { //char palavra[10]="alguma coisa"; //return palavra; //ERRADO!!!! char* pStr; pStr=malloc(12); //o 12 e' o numero de bytes(neste caso caracteres) que queres alocar strcpy(pStr,"alguma coisa"); return pStr; } int main () { printf("%s",returnPalavra()); return 1; } ja' agora "Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!" 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."
pmg Posted April 18, 2012 at 05:34 PM Report #449777 Posted April 18, 2012 at 05:34 PM Convem lembrar que ptr = malloc(strlen("alguma coisa")); strcpy(ptr, "alguma coisa"); falha por um byte. A string "alguma coisa" precisa de 13 bytes, mas o seu comprimento é 12. O '\0' também pertence. Assim seria melhor ptr = malloc(strlen("alguma coisa") + 1); strcpy(ptr, "alguma coisa"); 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!
pikax Posted April 18, 2012 at 05:36 PM Report #449778 Posted April 18, 2012 at 05:36 PM Convem lembrar que ptr = malloc(strlen("alguma coisa")); strcpy(ptr, "alguma coisa"); falha por um byte. A string "alguma coisa" precisa de 13 bytes, mas o seu comprimento é 12. O '\0' também pertence. Assim seria melhor ptr = malloc(strlen("alguma coisa") + 1); strcpy(ptr, "alguma coisa"); pois esqueci-me do '\0' :/ 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."
mcosta Posted April 18, 2012 at 05:46 PM Author Report #449779 Posted April 18, 2012 at 05:46 PM agora tenho assim: dá logo erro na declaração da função:-(( #include<stdio.h> #include<stdlib.h> #include<string.h> char* verifica (int num); int main () { int num; printf ("por favor introduza a idade do nadador"); scanf ("%d", &num); printf("%s",verifica()); return 1; } char* verifica (int num) //mesmo de ali de cima, ja agora tens que indentar melhor o codigo { char* pStr; pStr=malloc(11); if(num>=5 && num<=7) { strcpy(pStr,"infantil A"); return pStr; } if(num>=5 && num<=11) { strcpy(pStr,"juvenil A"); return pStr; } else { printf ("erro ao inserir numero"); } }
pikax Posted April 18, 2012 at 05:50 PM Report #449781 Posted April 18, 2012 at 05:50 PM o tas a chamar a funcao sem o argumento: printf("%s",verifica(num)); 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."
pmg Posted April 18, 2012 at 05:51 PM Report #449783 Posted April 18, 2012 at 05:51 PM #include<stdio.h> #include<stdlib.h> #include<string.h> char* verifica (int num); int main () { int num; printf ("por favor introduza a idade do nadador"); scanf ("%d", &num); printf("%s",verifica()); return 1; } Repara nas linhas assinaladas ... nao achas que falta alguma coisa na segunda linha? 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!
mcosta Posted April 18, 2012 at 05:51 PM Author Report #449784 Posted April 18, 2012 at 05:51 PM continua a dar no malloc!! da este erro: 26 C:\Users\Proprietario\Desktop\lol.cpp invalid conversion from `void*' to `char*'
pmg Posted April 18, 2012 at 05:53 PM Report #449785 Posted April 18, 2012 at 05:53 PM continua a dar no malloc!! da este erro: 26 C:\Users\Proprietario\Desktop\lol.cpp invalid conversion from `void*' to `char*' cpp? ???? Estás no quadro errado. 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!
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