2012-11-18 5 views
0

Je voudrais prendre un argument de ligne de commande (qui sera un entier supérieur à zéro) et l'utiliser comme un paramètre entier dans une fonction (pour décider quelle partie de la fonction utiliser).C++ char * en erreur int

double func(double x, double y, double z, int n) { 
    if (n==1) { return 1; } 
    if (n==2) { return 2; } 
    // etc 
} 
int main (int argc, char *argv[]) { 
    int n = argv[1]; 
    // etc, later I call func(x,y,z,n) with this definition of n 
} 

Lorsque je tente de compiler, je reçois des avertissements:

warning: invalid conversion from ‘char*’ to ‘int’ 
warning: initializing argument 4 of ‘double func(double, double, double, int)’ 

Je pense que je comprends pourquoi cela arrive, je ne sais pas comment le résoudre. Rien que j'ai trouvé jusqu'à présent googling a été trop utile. Je suis assez nouveau au C++, et toute information qui me dirigerait dans la bonne direction serait géniale. Merci pour votre temps.

+1

Astuce: 'argv' est de type' 'char **. Vous pouvez le considérer comme un tableau de chaînes. – Pubby

+1

Vous cherchez peut-être ceci: http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/ – Rubens

+0

L'argument ** ne sera pas ** un nombre entier supérieur à zéro. Ce sera une chaîne de style C qui, on l'espère, ** représente ** la valeur d'un entier supérieur à zéro. Vous devez ** convertir ** cette chaîne de style C en la valeur qu'elle représente. –

Répondre

1

argv[1] est de type char*. Convertir en entier en utilisant strtol:

char *ptr; 
int n = strtol(argv[1], ptr, 10); 
/* Error checking */ 
1

Vous pouvez utiliser std::istringstream pour convertir le nombre:

int main(int ac, char * av[]) { 
    int av1; 
    if (2 <= ac 
     && std::istringstream(av[1]) >> av1) { 
     do_something_with(av1); 
    } 
    else { 
     report_error(); 
    } 
}