Ir para conteúdo
Fórum Script Brasil
  • 0

Numeros Aleatorios E Mais


oCx

Pergunta

Ae beleza? Bom, eu queria fazer um programa que recebe na linha de comando do DOS alguns parametros:

Ex: -p(para tal coisa) -w(para tal coisa) -a(para tal coisa)

Claro que voces já viram programas assim, então, queria fazer um programa neste estilo, so que o problema é, como deixo meu codigo mais legivel usando estes exemplos acima?

já usei: if(!strcmp(argv[1],"-p")) faz tal coisa..

Isto esta absolutamente correto, da certo, mas queria adcionar mais parametros, deste jeito:

ex: programa -p -w -r -a 56987

onde cada parametro serve para alguma coisa, isto foi so um exemplo.

então, este é o problema, vou ter que usar um tanto de strcmp's para fazer o programa, ou há um jeito mais facil?

ex: if(!strcmp(argv[1],"-p")) {

if(!strcmp(argv[2],"-w"))

etc... (ia demorar muito, e confudir o codigo, se possivel

me apresente uma maneira mais facil)

Desde já agradeco!

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

ah.. sei, so uma coisa, eu coloquei o titulo como Numeros Aleatorios, porque ia perguntar sobre isto, mas eu encontrei na net e acabei perguntando outra coisa..

heh.. Mas, afinal, este metodo seu é meio cabecudo, talvez eu deva explicar melhor:

Voce já deve ter vistos programas deste jeito:

ex: netcat , netstat etc..

Neles aparecem:

-n[faz tal coisa] -l[este faz outra coisa] ...

então, queria fazer um programa neste estilo, so que, quanto eu precisar colocar mais de um parametro na mesma linha? ex:

programa -n -l -p

Onde -n,-l,-p faz alguma coisa. Como -n é o argv[1] eu teria que fazer:

if(! strcmp(argv[1],"-n")

if(! strcmp(argv[2],"-l")

if(! strcmpf(argv[3],"-p")

....

Isto esta certo! O que eu queria saber, se existe um metodo melhor para fazer as comparacoes! Eu vi um programa assim, e ele usava um switch(), mas tinhas algumas funcoes que não sabia usar.

Se eu usar strcmps iria encher o programa e deixa-lo confuso! entendi?

imagine um programa assim:

programa -n -a -o -p -l -r -..

Imagina um tanto de strcmp eu ia usar sendo que cada parametro podia ser usado, em qualquer posicao, para fazer a mesma coisa:

programa -a -n -o -p -r -l -...

entendeu? (espero que sim)

Link para o comentário
Compartilhar em outros sites

  • 0

Sim, eu entendi o que você disse e por isso mesmo que sugeri utilizar um for para percorrer os argumentos. Dependendo da quantidade realmente fica inviável testar todas as combinações possíveis. Por isso que também sugeri utilizar variáveis booleanas que guardarão se o argumento foi passado ou não. Segue um exemplo do que eu disse anteriormente:

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

int main(int argc, char *argv[]) {
   bool opcao1, opcao2, opcao3;
   
   for (int i=0; i<argc; i++) {
       if (strcmp(argv[i], "-opcao1")==0) opcao1 = true;
       if (strcmp(argv[i], "-opcao2")==0) opcao2 = true;
       if (strcmp(argv[i], "-opcao3")==0) opcao3 = true;
   }
   
   if (opcao1)
       printf("a opcao1 foi habilitada!\n");
   
   if (opcao2)
       printf("a opcao2 foi habilitada!\n");

   if (opcao3)
       printf("a opcao3 foi habilitada!\n");

   system("pause");
}

Com esse exemplo acima você pode chamá-lo com os argumentos em quaisquer posições, exemplo:

arquivo -opcao1 -opcao2 -opcao3

arquivo -opcao3 -opcao1 -opcao2

arquivo -opcao1 -opcao2

arquivo -opcao1 -opcao3

arquivo -opcao3

arquivo -opcao2

arquivo -opcao1

Ou qualquer outra combinação. O que importa é que se "-opcao1" foi passado na chamada, então a variável "opcao1" vai ser true e o bloco do if que testa o valor dessa variável será executado. Sacou? wink.gif

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

system("pause");

Aproveitando esse tópico, para q serve a função system e em que biblioteca se encontra?

esta função serve para que o programa espere que o usuário aperte uma tecla antes de encerrar assim, é possível observar o resultado do programa. Caso contrário o programa fecha rapidamente ( com a impressão de que ocorreu um problema que forçou o fechamento do programa ). Está na biblioteca <stdlib.h>

Editado por rafaelbortoletto
Link para o comentário
Compartilhar em outros sites

  • 0
system("pause");

Aproveitando esse tópico, para q serve a função system e em que biblioteca se encontra?

A função system() serve para você chamar um comando ou programa no sistema operacional (como se o tivesse chamado a partir da linha de comando). No caso ali, eu chamei o comando pause para poder parar a execução.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
beleza, ae, valeu. Espero que o problema tenha resolvido!

A unica coisa que não sei no codigo que voce colocou é:

bool opcao...

Mas tah beleza, é so estudar um pouquinho:)

Nem todos os compiladores possuem o tipo bool (Booleano), mas nada te impede de utilizar um int e determinar que 0 é falso e qualquer outro valor é verdadeiro. Vai dar no mesmo. wink.gif

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Só uma observação:

Ao declarar uma variável int, você estará alocando um grande espaço de memória, no caso do GCC: 32 bits. Isso é muito mais do que você precisa, se seu objetico é usar somente um único bit, e setá-lo como zero ou um. Recomendo que você use uma variável de tamanho menor, um short int por exemplo, você ocupará apenas 2 bytes se compilar no GCC. VOcê até poderia trabalhar com chars que ocupam somente 1 byte da memória, mas é meio chato trabalhar com valores numéricos em variáveis char no C++. Realmente, eu não sei se seria possível alocar somente um único bit em um programa C++, se alguém souber, por favor poste aqui.

Obrigado.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...