char '*' no argv em c

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
 
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)
 
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)
Em termos de programação são equivalentes. E acede-se sempre com argv[n].
 
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
 
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?
 
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
 
Back
Topo