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.
Pergunta
Hicker
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 HickerLink para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
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.