Savoir utiliser argc et argv
Salut,
En fait, il semblerait que tu ne saches déjà pas ce que sont ni à quoi servent les parametre argc et argv de ta fonction main...
Dans la fonction
Code:
1 2 3 4 5
|
int main(int argc, char* argv[])
{
// le code
} |
(ou argc pourrait avoir n'importe quel nom, du moment que c'est un entier, et our argv également, pour autant que ce soit un tableau de pointeur de type char (ou un pointeur de pointeur de type char)):
argc représente le nombre d'argument passés à savoir:
1 s'il n'y a que la commande sous la forme de
ou 1+ nombre d'argument séparé par un espace, soit
Code:
1 2
| $: monapp <fichier ==>argc==2
$: monap < fichier ==>argc==3 |
la différence étant la présence ou non de l'espace entre > et fichier
argv, quant à lui, sera un tableau de chaines de caractères "type C" contenant l'ensemble des parametres passés à la commande à savoir
Code:
1 2 3 4
|
$: monapp ==> argv[0]=="monapp\0"
$: monapp <fichier ==> argv[0]=="monapp\0", argv[1]=="<fichier\0"
$: monapp < fichier ==> argv[0]=="monapp\0", argv[1]=="<\0", argv[2]=="fichier\0" |
La première chose à faire, c'est donc de vérifier le nombre et la valeur des arguments, et de gérer le fichier de sortie en fonction...
Un exemple parmis tant d'autre serait quelque chose du genre de
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
int main(int argc, char* argv[])
{
//personnellement je préfère les strings aux chaine "C like"
std::string chaine;
switch(argc)
{
case 1:
// l'utilisateur n'a pas donné de nom de fichier... y en a peut etre un
// par défaut ??? (sinon, il faudra gérer les choses correctement ;) )
chaine="fichierlogpardefaut";
break;
case 2:
// si < apparait, c'est accolé au nom du fichier
chaine=argv[1];
// oops... le < apparait peut etre
chaine=chaine.substr(chaine.find_first_not_of("<"),chaine.lengt());
break;
case 3:
//argv[1] a pris > et argv[2] a pris le nom du fichier
chaine=argv[2];
}
//"yapuka" ouvrir le fichier
std::ifstream fichier(chaine.c_str());
// et à continuer le traitement
} |
evidemment, cela signifie que le système n'interprète pas de lui meme la signification de <... tu devrait peut etre envisager l'utilisation de -f pour indiquer le fichier ;)