2010-07-26 4 views
3

s'il vous plaît pardonnez-moi s'il s'agit d'une question Noob, mais je suis un débutant à C, apprendre seulement pendant un certain temps. J'ai essayé d'écrire un programme qui résume deux nombres (fournis comme params à l'application). Le code est comme ceci:Accéder aux arguments de la ligne de commande dans C

#include <stdlib.h> 
#include <stdio.h> 

int main(int argc, char** argv) 
{ 
    int a = atoi(argv[0]); 
    int b = atoi(argv[1]); 
    int sum = a+b; 
    printf("%d", sum); 
    return 0; 
} 

Mais je reçois des résultats incorrects - nombres énormes, même pour les petites entrées comme 5 et 10. Quel est le problème ici?

+2

Pour le débogage d'un problème, assurez-vous d'imprimer les entrées et les sorties. La première chose à faire serait d'ajouter ''printf (" argv [0] =% s \ n ", argv [0]); printf ("argv [1] =% s \ n", argv [1]); 'suivi de' printf ("a =% d \ nb =% d \ n", a, b); 'après les appels à 'atoi()'. Si vous l'aviez fait, vous n'auriez probablement pas eu besoin de poser la question. (N'oubliez pas d'imprimer une nouvelle ligne après la réponse!). –

+0

Aussi, c'est une question C; '#include ' est un en-tête C++. Utilisez '#include '. –

+0

Merci, fera l'affaire. – PeterK

Répondre

18

Le premier argument du programme est le nom du programme lui-même. Essayez d'utiliser ce qui suit à la place.

int a = atoi(argv[1]); 
int b = atoi(argv[2]); 
+2

Aww, vous gagnez. Bien que maintenant que j'y pense, pourquoi obtient-il «des nombres énormes»? Est-ce que 'atoi (argv [0])' ne devrait pas être '0' dans presque tous les cas? –

+1

Merci monsieur! Cela a aidé. – PeterK

+1

@Michael Mrozek: Oui, je suis d'accord, mais tant que cette erreur n'aura pas été éliminée, tout autre problème ne sera pas possible. Eh bien, cas résolu. – torak

1

Vous voulez utiliser argv[1] et argv[2]. Le premier élément de argv (argv[0]) est le command itself. Ce sera le nom de l'exécutable de votre programme ...

3

C'est parce que argv [0] est le nom de votre exécutable.

Vous devriez utiliser argv [1] et argv [2].

Et assurez-vous que le nombre (argc) est 3.

1

En supposant que le nom de votre programme est noob.c et vous compilez avec gcc ./noob.c -o noob. Vous devez effectuer ces modifications.

int a = atoi(argv[1]); 
int b = atoi(argv[2]); 

Vous avez de l'exécuter et le tour est joué ./noob 1 2 la sortie sera 3. Argc vaut 3 viz nombre d'arguments de ligne de commande, votre entrée sera la 1ère et 2ème valeurs de la ligne de commande.

0

C'est parce que argv[0] est le nom du programme, et non pas le premier argument (à savoir si vous exécutez myapp 4 5, argv devient myapp, 4, 5).

Questions connexes