1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

char '*' no argv em c

Discussão em 'Programação' iniciada por pks, 20 de Abril de 2008. (Respostas: 7; Visualizações: 1478)

  1. pks

    pks Power Member

    Boas

    no codigo em anexo (em c) quando eu faço "calcula 2 + 2" ele identifica me o *argv[2] como o char '+' o mesmo acontece com os chars '-' e '/' . o problema esta quando eu faço por exemplo "calcula 2 * 2" em que me devolve o *argv[2] como o char 'E'.
    alguem me sabe explicar porque?

    codigo:
    Código:
    #include <stdio.h>
     int atoi(char s[]); /*converte uma string para um inteiro*/
     double calcular (char *calc[]);
     int main(int argc, char *argv[]) {
      double res=0;
      printf("%c",*argv[2]);
      res = calcular(argv);
     
      printf ("%.2f",res);
     
      return 0;
     
     }
     
     
     double calcular (char *calc[]){
      double op1=0, op2=0, res=0;
      char operacao ;
     
      op1 = atoi(calc[1]);
      op2 = atoi(calc[3]);
      operacao = *calc[2]; 
     
     
     
      switch (operacao){
       case '+':
       res = op1 + op2;
       break;
       case '-':
       res = op1 - op2;
       break;
       case '*':
       res = op1 * op2;
       break;
       case '/':
       res = op1 / op2;
       break;
      }
      return res;
     }
     
     /*atoi: converte uma string para um inteiro*/
     int atoi(char s[]){
      int i=0, n, sign;
     
      sign = (s[i] == '-') ? -1 : 1;
      if (s[i] == '+' || s[i] == '-') /**salta o sinal*/
       i++;
      for(n = 0; s[i] >= '0' && s[i] <= '9'; ++i)
       n = 10 * n +(s[i] - '0');
      return sign * n;
     }
     
    

    obrigado
     
  2. Foxknight

    Foxknight Power Member

    Experimenta em vez de int main (int argc, char *argv[]) usares int main (int argc, char **argv).

    Depois se t quiseres referir a uma posição do **argv basta usares argv[n] ao invés de *argc[n] (acho que é aqui que estás a fazer mal).

    Apontadores nunca foi o meu forte (apesar de C ter muito disso :D)
     
  3. Em termos de programação são equivalentes. E acede-se sempre com argv[n].
     
  4. Tyran

    Tyran Power Member

    Epah aqui funciona bem....

    Devias era meter uma coisita do genero, mas mais trabalhada claro
    Código:
      if (argc < 4) {
          printf("Erro. falta bla bla bla");
        return 0;
    }
    
    cumpzz
     
  5. raVemjr

    raVemjr I'm cool cuz I Fold

    Isso é muito estranho...segundo a tabela ASCII não há qualquer relação entre os dois caracteres.

    Diz-me uma coisa, o que acontece quando metes E mesmo?
     
  6. pks

    pks Power Member

    tive a falar ontem com o eng da cadeira.
    pelos visto o * no na linha de comandos devolve a directoria ou algo paracido...
    obrigado pela ajuda
     
  7. Tyran

    Tyran Power Member

    Última edição: 22 de Abril de 2008
  8. madskaddie

    madskaddie Power Member

    Não sei em que ambiente estás a trabalhar, mas pode ser qq coisa com a shell e não com o programa;

    utilizador --> shell --> 'programa'
     

Partilhar esta Página