Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Fitorinaudo

duvida: interpretar caracteres da linha de comando

Mensagens Recomendadas

Fitorinaudo

Boa tarde.

Alguem me pode explicar como é que ao darmos ( na linha de comandos ) , por exemplo, a letra A, como é que se faz para 'chamar' um método que adiciona o próximo numero dado como argumento?

obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Fitorinaudo

o que eu tenho de escrever na linha de comandos:

./exercicio A 1 A 2 A 3.

Objectivo disto: adicionar o 1, dps adicionar o 2 ao 1, e dps adicionar o 3 ao 2 + 1.

Ou seja o A, tem de chamar uma função que faça a soma dos argumentos certo?

Como eq isso se faz, essa relação?

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Se definires a funcao main com os parametros [t]argc[/tt] e argv podes usar esses parametros para identificar os argumentos passados na linha de comandos.

[t]argc[/tt] tem o numero de argumentos

O array [t]argv[/tt] tem cada um dos argumetnos, incluindo quando possivel, o nome do programa.

Ora experimenta:

#include <stdio.h>

int main(int argc, char **argv) {
 int k;
 for (k = 0; k < argc; k++) {
   printf("argumento #%d: %s\n", k, argv[k]);
 }
 return 0;
}


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
HappyHippyHippo

o que eu tenho de escrever na linha de comandos:

./exercicio A 1 A 2 A 3.

Objectivo disto: adicionar o 1, dps adicionar o 2 ao 1, e dps adicionar o 3 ao 2 + 1.

Ou seja o A, tem de chamar uma função que faça a soma dos argumentos certo?

Como eq isso se faz, essa relação?

Obrigado

essa explicação continua a não fazer muito sentido, afinal para que serve o A ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Fitorinaudo

Certo eu isso percebo. Agora outra dúvida. Esta função é so para fazer um somatorio de numeros dados nos argumentos. Podem-me ajudar com o erro sff? Diz 'Core Dumped'.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char * argv[]){



printf("A soma dos números dado dá: %d\n", soma(argc, *argv));

return 0;
}




int soma(int argc, char *argv[]){

int somatorio;

int i=0;//Serve para percorrer o vector.

for(i = 1 ; i < argc ; i++)
somatorio += atoi(argv[i]);
//Somatorio vai somando os 'numeros' que sao convertidos de chars para inteiros com a função atoi.

return somatorio;
}

HappyHippyHippo

o A serve para chamar um método que adiciona o número que está logo depois do A. Como é que isso se faz?

Editado por pmg
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Podem-me ajudar com o erro sff? Diz 'Core Dumped'.

Duas coisas importantes:

1) falta-te um prototipo 'activo' para a funcao soma quando a chamas na main.

2) nao incializaste a variavel somatorio. O resultado pode ser uma coisa qualquer.

Nota: como que queres que o teu programa se comporte com os arguemntos "A 1 A 2 A 3" (nomeadamente os 'A')?

Editado por 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Fitorinaudo

1) Podes-me ajudar então primeiro a resolver o problema do codigo em cima. Inicializar a variavel somatorio onde? Na função mesmo? ou no Main? Podes mostrar-me o codigo como corrigir esse problema da variavel sff? Ja tentei tudo.. Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Marzkor

Acho que devias fazer o seguinte :

for (i=0;i<argc;i=i+2)

Se argv == A então

soma = soma + argv[i+1]

Nota : A sintaxe deste codigo está incorrecta

Edit

int i;
i=0;

Editado por Marzkor

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

1) acrescenta antes da funcao main a linha com o prototipo da funcao soma

int soma(int argc, char *argv[]);

2) para inicializares uma variavel, na linha onde a defines acrescenta um = e um valor

int somatorio = 0;

OUTRA COISA: liga o maximo de warnings do teu compilador e corrige-os todos antes de aceitares um programa como terminado.


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
Fitorinaudo

Marzkor,

Entao devia fazer como? for( int i=1, ........) ? Inicializá-lo dentro do for? Já tentei fazer isso so que na linha diz que isso só da no C99 ou uma coisa assim.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Fitorinaudo

ah fiz assim porque o argv[0] é o nome do executavel e nao quero que isso entre no somatorio.

pmg,

Ja meti o prototipo da função soma.

E agora onde inicializo a variavel?

Podes mostrar-me exactamente? Inicializá-la no meu codigo.. Ja tentei de tudo

..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Marzkor

Peço desculpa pelo o meu desconhecimento em relação o pq de 1.

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char * argv[]){
printf("A soma dos números dado dá: %d\n", soma(argc, argv));
return 0;
}


int soma(int argc, char *argv[]){
int somatorio=0;
int i=0;//Serve para percorrer o vector.
for(i = 1 ; i < argc ; i++)
somatorio += atoi(argv[i]);
//Somatorio vai somando os 'numeros' que sao convertidos de chars para inteiros com a função atoi.
return somatorio;
}

no vs sem problemas

Editado por Marzkor

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Marzkor

Podes meter o erro aqui ? Fizeste copy paste do meu codigo ?

A unica coisa que o VS deu foi um warning mas a resolução é esta

#include <stdio.h>
#include <stdlib.h>
int soma(int argc, char *argv[]){
int somatorio=0;
int i=0;//Serve para percorrer o vector.
for(i = 1 ; i < argc ; i++)
somatorio += atoi(argv[i]);
//Somatorio vai somando os 'numeros' que sao convertidos de chars para inteiros com a função atoi.
return somatorio;
}
int main(int argc, char * argv[]){

printf("A soma dos números dado dá: %d\n", soma(argc, argv));
return 0;
}

Primeiro as Funções e depois o Main.

Editado por Marzkor

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Fitorinaudo

soma.c: In function ‘soma’:

soma.c:8:20: error: ‘argv’ undeclared (first use in this function)

soma.c:8:20: note: each undeclared identifier is reported only once for each function it appears in

soma.c:8:28: error: expected ‘;’ before ‘)’ token

soma.c:8:28: error: expected statement before ‘)’ token

copiei o teu codigo e aparece isto na linha de comandos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Fitorinaudo

Nenhum lol. Text Editor do linux, e compilo com gcc. e compilo na linha de comandos do linux, onde corro tambem o executavel.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Marzkor

Uma pergunta fazes ctrl + S(guardar) e depois compilas ?

EDIT : GCC + Text Editor = sem problemas

O meu ultimo codigo.

Editado por Marzkor
  • Voto 1

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.