Jump to content
Fitorinaudo

duvida: interpretar caracteres da linha de comando

Recommended Posts

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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?

Edited by pmg
GeSHi

Share this post


Link to post
Share on other 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')?

Edited by 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!

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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;

Edited by Marzkor

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other sites
Marzkor

Já agora pq meter o i = 0 e depois a 1 ?

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

for(i = 1 ; i < argc ; i++)

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

..

Share this post


Link to post
Share on other 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

Edited by Marzkor

Share this post


Link to post
Share on other sites
Fitorinaudo

pois Markzor, assim dá-me erro. Core dumped. Não podes ajudar-me sff? nao encontro o erro mesmo ...que treta

Share this post


Link to post
Share on other 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.

Edited by Marzkor

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
Marzkor

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

EDIT : GCC + Text Editor = sem problemas

O meu ultimo codigo.

Edited by Marzkor
  • Vote 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

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.