Ir para o conteúdo
joao_oliveira

jogo das proteinas

Mensagens Recomendadas

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

Editado por joao_oliveira
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Marzkor

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

se ainda tiveres duvidas pergunta!

Editado por Marzkor

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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);

???

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
joao_oliveira

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por Marzkor

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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??

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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) .

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.