Verification d'argument

Signaler
Messages postés
37
Date d'inscription
jeudi 9 mai 2002
Statut
Membre
Dernière intervention
30 août 2003
-
Messages postés
37
Date d'inscription
jeudi 9 mai 2002
Statut
Membre
Dernière intervention
30 août 2003
-
Voila ce que je voudrais faire au lancement de mon programme : tester la presence d'argument au programme. Pour que mon prog fonctionne correctement, il faut 2 parametres, et je voudrais verifier qu'ils y sont bien. J'ai essayé ca mais sans succes :

int main (int argc, char *argv[])
{
if(strcmp(argv[1], "") || strcmp(argv[2], ""))
{
// insctructions
}
else
{
// instructions
}

qd lancement sans argument -> erreur
qd lancement avec argument, le prog fonctionne normalement, trouver l'erreur

12 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Regarde avant argc qui te dira combien il y a d'arguments.
strcmp(argv[1], "") n'est pas productif, pour savoir si une chaine est vide on teste juste le 1er octet:
if(argv[1][0] == 0) c'est vide. A ne faire que quand tu auras verifie valeur de argc.
BruNews, ciao...
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Autre chose, indexation en C part a ZERO et non a 1 !!!
BruNews, ciao...
Messages postés
37
Date d'inscription
jeudi 9 mai 2002
Statut
Membre
Dernière intervention
30 août 2003

merci pour la rapidité de tes reponses.
j'ai ecouté tes conseils, et j'ai remplacé mes strcmp(argv[1], "") || strcmp(argv[2], "") par argv[0][0] == 0 || argv[1][0] == 0
maintenant, qu'il y est des parametres ou non, le programme ne fait + rien du tout, et qd il n'y en a pas, il y a le message d'erreur...
autre chose, comment savoir cb y a t'il d'argument ?
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Je t'ai dit: argc est le int qui dit le nombre, pour cela qu'il est a consulter en 1er.
BruNews, ciao...
Messages postés
37
Date d'inscription
jeudi 9 mai 2002
Statut
Membre
Dernière intervention
30 août 2003

je viens de faire ce petit bout de code, une boucle qui test chaque argument, mais il y a une erreur lorsque je lance le programme, tjr le meme d'ailleurs (erreur d'application...la memoire ne peut pas etre read)
voici le code :

int main (int argc, char *argv[])
{
int i = 0;
int nbre = 0;
while(argc >= i)
{
if(argv[i][0] == 0)
{
nbre = nbre + 1; // variable qui me sert par la suite
i++;
}
else
{
i++;
}
}

ou se cache l'erreur ? (aucune erreur de compilation)
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Inutile de preciser "aucune erreur de compilation" car indique SEULEMENT que la syntaxe du code est valide.
Precise plutot le but:
tu veux le compte des args qui sont NULL ?
int nbr;
int main (int argc, char *argv[])
{for(int i 0; i < argc; i++) if(argv[i][0] 0) nbr++;

}
BruNews, ciao...
Messages postés
37
Date d'inscription
jeudi 9 mai 2002
Statut
Membre
Dernière intervention
30 août 2003

le code ne fonctionne pas, la variable nbr reste tjr a 0
jai ajouté simplement un cout << nbr; avant }, et tjr 0 :-\
Messages postés
258
Date d'inscription
jeudi 20 mars 2003
Statut
Membre
Dernière intervention
16 août 2004

salut!
Est-ce que tu as appelé ton programme avec des arguments ?
Sinon c'est normal que nbr est égal toujours à 0.
Si tu as VC, tu vas dans Settings->Debug->Program arguments, et tu mets les arguments que tu veux.
Bye,Xentor609
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Tu as affiche aussi argc ?
Si nbr reste a zero sera que aucun argument n'est NULL ou que 0 argument. Tu modifies la boucle afin d'obtenir ce que tu veux.
BruNews, ciao...
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Je ne sais pas trop ce que vous voulez faire là, mais si un argument est à NULL, c'est qu'il n'existe pas et donc argc ne le compte pas comme argument. Donc énumérer le nombre d'arguments vides ca ne veut rien dire.

Kaid - kaid.fr.st
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Je sais bien mais c'etait juste pour lui montrer la boucle qu'il n'avait pas reussi a faire. Le but restera sans reponse.
BruNews, ciao...
Messages postés
37
Date d'inscription
jeudi 9 mai 2002
Statut
Membre
Dernière intervention
30 août 2003

les arguments sont different a chaque demarage du programme, c'est suivant les futur utilisateurs.
le but c'est de compter le nbre d'argument qui est passé au programme, et de verifier qu'ils ne soient pas vide
mais apres une bonne nuit de sommeil et la reponse de Kaid, j'ai vu que j'essayai de faire qqchose de compliqué pour une chose tte simple

mon prog a besoin de 7 arguments pour fonctionner, il suffisait de poser une condition sur argc
if(argc == 8)...