joao_oliveira Posted March 22, 2013 at 10:32 PM Report #500080 Posted March 22, 2013 at 10:32 PM (edited) Boa noite. Esta parte do código consiste num interpretador que neste caso interpreta o comando seq que pode ser invocado com ou sem argumentos(uma string de As e Bs). Gostaria de saber se alguém me consegue explicar o porque de me dar estes erros e como os resolver. prot.c: Na função ‘cmd_seq’: prot.c:17:3: error: too few arguments to function ‘guarda_sequencia’ prot.c:6:6: note: declarado aqui prot.c:19:3: error: too few arguments to function ‘obtem_sequencia’ prot.c:10:6: note: declarado aqui make: ** [prot.o] Erro 1 o código é: #include <stdio.h> #include <string.h> #include "erro.h" #define MAX_SIZE 1024 void guarda_sequencia(char *guarda_args,char *args) { strcpy(guarda_args, args); } void obtem_sequencia(char *args) { printf("%s",args); } int cmd_seq(char *args) { if(args != NULL) { guarda_sequencia(); } else { obtem_sequencia(); } return 1; } /*Interpreta um comando passado numa linha*/ int interpretar(char *linha) { char comando[MAX_SIZE]; char args[MAX_SIZE]; int nargs; nargs=sscanf(linha, "%s %s", comando, args); /*comando seq com argumentos*/ if(strcmp(comando, "seq") == 0 && nargs == 2) return cmd_seq(args); /*comando seq sem argumentos*/ else if(strcmp(comando, "seq") == 0 && nargs == 1) return cmd_seq(NULL); /*comando coords*/ /*else if(strcmp(comando, "coords") ) return cmd_coords();*/ /*comando sair*/ else if(strcmp(comando, "sair") == 0){ return 0; } else { /*Devolve o erro*/ return mensagem_de_erro(E_COMMAND); } } /*Interpretador de comandos*/ void interpretador(){ int resultado=0; char buffer[MAX_SIZE]; int ciclo=1; while(ciclo && fgets(buffer, MAX_SIZE, stdin) != NULL){ resultado=interpretar(buffer); if(resultado==0) ciclo=0; } } int main(){ interpretador(); return 0; } obrigado pela atenção:) Edited March 23, 2013 at 03:44 AM by joao_oliveira GeSHi
thoga31 Posted March 22, 2013 at 10:35 PM Report #500081 Posted March 22, 2013 at 10:35 PM Utiliza as tags CODE para colocar o código. Eu já as coloquei, faz "editar" para veres como fiz. (faz no final "cancelar" e não "guardar") 😉 Knowledge is free!
pmg Posted March 22, 2013 at 10:43 PM Report #500083 Posted March 22, 2013 at 10:43 PM Tu definiste a função guarda_sequencia() com dois parametros: ambos strings. Portanto, ao chamar a função tens de fornecer os argumentos guarda_sequencia(string1, string2); A mesma coisa paraa função obtem_sequencia(), só que neste caso apenas usaste um parametro na definição. Para chamar a função precisas de fornecer um argumento obtem_sequencia(string3); Sugestão: tenta melhorar a indentação do teu código. 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!
joao_oliveira Posted March 22, 2013 at 10:54 PM Author Report #500089 Posted March 22, 2013 at 10:54 PM Então teria de ser algo do gênero: guarda_sequencia(guarda_args, args); obtem_sequencia(args); ???
Localhost Posted March 22, 2013 at 11:26 PM Report #500102 Posted March 22, 2013 at 11:26 PM Onde estás a chamar a função guarda_sequencia não tens acesso à variável guarda_args, por isso, não podes enviar como argumento para a função. here since 2009
joao_oliveira Posted March 22, 2013 at 11:45 PM Author Report #500106 Posted March 22, 2013 at 11:45 PM entao como é que faço para ter acesso á variável guarda_args?? desd ja um muito obrigado pelas respostas:)
Marzkor Posted March 23, 2013 at 01:29 AM Report #500108 Posted March 23, 2013 at 01:29 AM Sabes que tens dois tipos de passagem : por referencia e por valor. certo ?
joao_oliveira Posted March 23, 2013 at 03:40 AM Author Report #500113 Posted March 23, 2013 at 03:40 AM não. eu estou a iniciar programação em c por isso estou com dificuldade em executar este projeto.
Marzkor Posted March 23, 2013 at 03:55 AM Report #500115 Posted March 23, 2013 at 03:55 AM (edited) um conselho da uma olhadela no google sobre passagem de referencia vs passagem de valor se ainda tiveres duvidas pergunta! Edited March 23, 2013 at 03:56 AM by Marzkor
joao_oliveira Posted March 23, 2013 at 06:21 PM Author Report #500150 Posted March 23, 2013 at 06:21 PM entao para ver se percebi na passagem por referencia ao chamar a funçao teria que ter guarda_sequencia(&guarda_args, &args); ???
Marzkor Posted March 23, 2013 at 06:51 PM Report #500153 Posted March 23, 2013 at 06:51 PM si mas tens de ter um apontador como parâmetro. Se não souberes pq (&)?
joao_oliveira Posted March 23, 2013 at 07:24 PM Author Report #500154 Posted March 23, 2013 at 07:24 PM mas o apontador e na funçao ne?
joao_oliveira Posted March 23, 2013 at 08:31 PM Author Report #500159 Posted March 23, 2013 at 08:31 PM o que pretendo fazer é que a funçao guarda_sequencia() que recebe args(neste caso uma string) me guarde essa string.
Marzkor Posted March 24, 2013 at 12:52 AM Report #500170 Posted March 24, 2013 at 12:52 AM (edited) mas o apontador e na funçao ne? sim o que pretendo fazer é que a funçao guarda_sequencia() que recebe args(neste caso uma string) me guarde essa string. pm Edited March 24, 2013 at 12:52 AM by Marzkor
joao_oliveira Posted March 24, 2013 at 04:20 PM Author Report #500194 Posted March 24, 2013 at 04:20 PM depois de alterar para : void guarda_sequencia(char *args) { char *guarda_args=0; strcpy(guarda_args, args); } void obtem_sequencia(char *guarda_args) { printf("%s",guarda_args); } int cmd_seq(char *args) { if(args != NULL) { guarda_sequencia(args); } else { obtem_sequencia(args); } return 1; } não deu mais erros nem warnings mas quando executo o programa ao introduzir uma sequencia o programa termina e da o seguinte erro : "Falha de segmentação (imagem do núcleo gravada)" alguém consegue ajudar??
Localhost Posted March 24, 2013 at 05:46 PM Report #500201 Posted March 24, 2013 at 05:46 PM guarda_args é read-only, estás a tentar guardar lá valores. here since 2009
joao_oliveira Posted March 24, 2013 at 07:05 PM Author Report #500208 Posted March 24, 2013 at 07:05 PM desculpa mas nao percebi o que querias dizer. o que eu quero que a funçao guarde e que quando eu introduzo por exemplo (seq asasas) ele me guarde (asasas) .
pmg Posted March 25, 2013 at 09:55 AM Report #500268 Posted March 25, 2013 at 09:55 AM o que eu quero que a funçao guarde e que quando eu introduzo por exemplo (seq asasas) ele me guarde (asasas) . Guarde onde? Tens que saber onde vais guardar a string. Sabes, a qualquer momento do programa, para onde apontam os ponteiros? Tens que saber isto! 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