Jump to content

duvida: interpretar caracteres da linha de comando


Recommended Posts

Posted

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

Posted

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

Posted

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!

Posted

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
Posted (edited)

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
Posted (edited)

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!

Posted

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

Posted (edited)

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
Posted

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!

Posted

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

..

Posted (edited)

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
Posted (edited)

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
Posted

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

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
×
×
  • 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.