Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

joao_oliveira

jogo das proteinas

Recommended Posts

joao_oliveira

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 by joao_oliveira
GeSHi

Share this post


Link to post
Share on other sites
thoga31

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!

Share this post


Link to post
Share on other sites
pmg

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!

Share this post


Link to post
Share on other sites
joao_oliveira

Então teria de ser algo do gênero:

guarda_sequencia(guarda_args, args);

obtem_sequencia(args);

???

Share this post


Link to post
Share on other sites
Localhost

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

Share this post


Link to post
Share on other sites
joao_oliveira

entao como é que faço para ter acesso á variável guarda_args??

desd ja um muito obrigado pelas respostas:)

Share this post


Link to post
Share on other sites
joao_oliveira

não. eu estou a iniciar programação em c por isso estou com dificuldade em executar este projeto.

Share this post


Link to post
Share on other sites
Marzkor

um conselho da uma olhadela no google sobre passagem de referencia vs passagem de valor

se ainda tiveres duvidas pergunta!

Edited by Marzkor

Share this post


Link to post
Share on other sites
joao_oliveira

entao para ver se percebi na passagem por referencia ao chamar a funçao teria que ter

guarda_sequencia(&guarda_args, &args);

???

Share this post


Link to post
Share on other sites
joao_oliveira

o que pretendo fazer é que a funçao guarda_sequencia() que recebe args(neste caso uma string) me guarde essa string.

Share this post


Link to post
Share on other sites
Marzkor

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 by Marzkor

Share this post


Link to post
Share on other sites
joao_oliveira

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??

Share this post


Link to post
Share on other sites
Localhost

guarda_args é read-only, estás a tentar guardar lá valores.


here since 2009

Share this post


Link to post
Share on other sites
joao_oliveira

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) .

Share this post


Link to post
Share on other sites
pmg

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!

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.