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

Dúvida sobre conversão


Hicker

Pergunta

Hi moços

Estou tendo problemas para implementar um código que receba argumentos (função main()) na hora de sua chamada.

#include <unistd.h>
#include <iostream>
#include <stdlib.h>
using namespace std;

int main (int argc, char* argv[]) 
{
  int opt;
  while((opt = getopt ( argc, argv, "abc:dm:")) != -1)
    {
    switch(opt)
      {
      case 'a': 
        cout << "Opção = " << static_cast<char>(opt) << endl;        
        break;
      case 'b':
        cout << "Opção = " << static_cast<char>(opt) << endl;        
        break;
      case 'c':
        cout << "Opção = " << static_cast<char>(opt) 
         << " Argumento = " << optarg << endl;        
        break;
      case 'd':
        cout << "Opção = " << static_cast<char>(opt)  << endl;        
        break;
      case 'm':
        cout << "Opção = " << static_cast<char>(opt)        
         << " Argumento = " << optarg << endl;
        float soma; int n; float a;                               
        for(int i=0;i<strlen(optarg);i++)
          if (optarg[i]!=' '){a=atof( & argv[optind-1][i]); soma+=a; n++;}; // <- problema de conversão
        cout<<"media = "<<(soma/n)<<endl;        //invalid conversion from `char' to `const char*'
        break;
      case '?':
        cout << "Opção Inválida= " << static_cast<char>(optopt) << endl;        
        break;
      case ':':
        cout << "Falta de argumentos. " << endl;
        break;
      }
    }
  for(; optind < argc; optind++)
      cout << "Opção inválida argv[" << optind << "]=" 
       << argv[optind] << endl;
  system("PAUSE");
  return 0;
}

O problema surge quando passo o argumento -m (para cálculo da média): -m "1 2 3 4", já que não consigo fazer a conversão dos números que estão na string em C char para números floats.

O compilador que estou usando é o g++ (Dev-Cpp 4.9.9.2).

Espero idéias. Abraços.

SOLVED: Sem querer resolvi o problema apenas colocando o operador & na frente de argv[optind-1]... parece que passando o endereço ele não acusa o erro.

Quem souber me explicar o porquê disso, fico agradecido.

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

2 respostass a esta questão

Posts Recomendados

  • 0

atof(argv[optind-1][i]

O problema é que você está dando à função atof() um argumento char, ao invés de um ponteiro, que é o esperado pela função. Dê o endereço prefixando a expressão com &.

Sem querer resolvi o problema apenas colocando o operador & na frente de argv[optind-1]...

Ah, essa foi boa!!! Respondi quase no mesmo instante que você. :)))

parece que passando o endereço ele não acusa o erro.

Quem souber me explicar o porquê disso, fico agradecido.

Mas está certo. É o endereço que atof() espera receber. Leia o help pra ver os detalhes.

Link para o comentário
Compartilhar em outros sites

  • 0

É mesmo... quase no mesmo tempo.

Agora que dei uma olhada na função atof com mais calma e realmente está na sua declaração um ponteiro como parâmetro... sempre achei que fosse um char. Mas valeu a ajuda.

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,2k
    • Posts
      652k
×
×
  • Criar Novo...