Passer des arguments dans le main()
Résolu
maniqk
-
isrforlife Messages postés 129 Date d'inscription Statut Membre Dernière intervention -
isrforlife Messages postés 129 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je travaille actuellement sur un projet où je dois traiter des tableaux de valeurs de différentes tailles... Actuellement je définis en début de fichier la taille de la matrice en écrivant des directives telles que #define tailleTableau 10.
Cependant, un ami qui programme plus que moi m'a dit que de cette façon là le programme n'est pas "réutilisable" dans le sens où je dois changer la valeur du #define lorsque je veux traiter un tableau d'une autre taille. Je souhaiterais en fait faire en sorte que le programme tourne pour chaque tableau... Du coup il m'a dit qu'il faudrait passer la taille du tableau en paramètre du main.
Etant relativement débutant en C, je n'ai jamais mis de paramètres dans la fonction main, j'ai toujours utilisé void main() ou int main().
Mon idée c'était de compter le nombre de lignes (ou colonnes) dans un fichier pour ensuite passer ce nombre en paramètre du main mais je n'ai aucune idée de comment faire...
Quelqu'un pourrait t'il m'éclairer ?
D'autre part, peut on appliquer des fonctions avant le main ? Si je souhaite charger mon tableau avant de rentrer dans le main() par exemple...
Merci d'avance,
maniqk
Je travaille actuellement sur un projet où je dois traiter des tableaux de valeurs de différentes tailles... Actuellement je définis en début de fichier la taille de la matrice en écrivant des directives telles que #define tailleTableau 10.
Cependant, un ami qui programme plus que moi m'a dit que de cette façon là le programme n'est pas "réutilisable" dans le sens où je dois changer la valeur du #define lorsque je veux traiter un tableau d'une autre taille. Je souhaiterais en fait faire en sorte que le programme tourne pour chaque tableau... Du coup il m'a dit qu'il faudrait passer la taille du tableau en paramètre du main.
Etant relativement débutant en C, je n'ai jamais mis de paramètres dans la fonction main, j'ai toujours utilisé void main() ou int main().
Mon idée c'était de compter le nombre de lignes (ou colonnes) dans un fichier pour ensuite passer ce nombre en paramètre du main mais je n'ai aucune idée de comment faire...
Quelqu'un pourrait t'il m'éclairer ?
D'autre part, peut on appliquer des fonctions avant le main ? Si je souhaite charger mon tableau avant de rentrer dans le main() par exemple...
Merci d'avance,
maniqk
A voir également:
- Passer des arguments dans le main()
- Passer de qwerty a azerty - Guide
- Passer a windows 10 - Accueil - Mise à jour
- Booter sur clé usb sans passer par le bios - Forum BIOS
- Comment trouver le mot de passe wifi sur son téléphone - Guide
- Passer de majuscule à minuscule - Guide
6 réponses
Oui, en utilisant monProgramme.exe 10, lorsque tu utiliseras dans ton main argv[1] tu auras "10".
Mais attention, ce ne sera pas la valeur 10 mais une chaîne de caractère!
donc argv[1][0] tu auras le char 1 et dans argv[1][1] tu auras le char 0
Donc il faut que tu fasses une fonction qui change ta chaîne de caractere pour la mettre dans un int et l'utiliser comme une valeur
Mais attention, ce ne sera pas la valeur 10 mais une chaîne de caractère!
donc argv[1][0] tu auras le char 1 et dans argv[1][1] tu auras le char 0
Donc il faut que tu fasses une fonction qui change ta chaîne de caractere pour la mettre dans un int et l'utiliser comme une valeur
En fait, si vous voulez prendre des paramettres dans le main vous devez faire:
int main(int argc, char **argv)
{
}
le int argc correspond aux nombres de paramettres que vous avez recu.
le char **argv correspond aux valeurs recus.
exemple:
./a.out salut ca va
le argc vaudra 4 : "./a.out" + "salut" + "ca" + "va"
le argv :
argv[0] = "./a.out"
argv[1] = "salut"
argv[2] = "ca"
argv[3] = "va"
int main(int argc, char **argv)
{
}
le int argc correspond aux nombres de paramettres que vous avez recu.
le char **argv correspond aux valeurs recus.
exemple:
./a.out salut ca va
le argc vaudra 4 : "./a.out" + "salut" + "ca" + "va"
le argv :
argv[0] = "./a.out"
argv[1] = "salut"
argv[2] = "ca"
argv[3] = "va"
Merci de votre réponse rapide !
En fait, j'avais déjà lu sur internet ce que vous venez d'écrire, mais je souhaitais appliquer ceci en passant en paramètre la taille du tableau.
Je pensais à écrire dans la console Windows quelque chose du genre monProgramme.exe 10 où 10 est la taille de mon tableau.
De cette façon, je pourrais utiliser argv[1] dans mon main().
Est ce comme ça qu'il faudrait procéder ?
En fait, j'avais déjà lu sur internet ce que vous venez d'écrire, mais je souhaitais appliquer ceci en passant en paramètre la taille du tableau.
Je pensais à écrire dans la console Windows quelque chose du genre monProgramme.exe 10 où 10 est la taille de mon tableau.
De cette façon, je pourrais utiliser argv[1] dans mon main().
Est ce comme ça qu'il faudrait procéder ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Le main c'est la fonction principale du programme c'est par elle que le programme commence et par elle qu'il se termine.
Lorsque le programme est lancé à partir d'une console (lorsqu'on l'utilise en commande) on peut récupère les arguments de la commande avec les paramètres de la fonction main :
int main(int argc,char *argv[])
argc contient le nombre d'argument passer en commande et argv contient les arguments de la commande sous forme de chaines de caractères.
Par exemple si vous lancez le programme main.exe de cette façon :
main.exe test 2 3
argc aura pour valeur 4, argv[0] la chaine "main.exe", argv[1] "test", argv[2] "2", argv[3] "3", on a donc nos quatre arguments de la commande.
"Mon idée c'était de compter le nombre de lignes (ou colonnes) dans un fichier"
Vous pouvez utiliser cette méthode ou celle de la récupération des arguments de la commande ou les deux si vous n'utilisez pas de scanf ou autre pour avoir le nom du fichier. Créez une fonction qui détermine la "tailleTableau" à partir d'un fichier et retourne la valeur sous forme d'un int, exemple de prototype :
int recup_tailleTableau(char *nomdufichier)
En utilisant cette fonction au début du main ça vous permettra de récupérer la tailleTableau et vous pouvez aussi passer le fichier en argument du programme qui sera récupéré dans le main avec l'aide des params argc et argv :
si argc == 2 ça veut dire que la commande doit contenir deux arguments : le nom du programme (ex : main.exe) et un argument supplémentaire.
argv[0] contient le nom du programme et argv[1] contiendra le second arg le nom du fichier, ex :
main.exe lefichier.txt
argc = 2
argv[0] = "main.exe"
argv[1] = "lefichier.txt"
Le main c'est la fonction principale du programme c'est par elle que le programme commence et par elle qu'il se termine.
Lorsque le programme est lancé à partir d'une console (lorsqu'on l'utilise en commande) on peut récupère les arguments de la commande avec les paramètres de la fonction main :
int main(int argc,char *argv[])
argc contient le nombre d'argument passer en commande et argv contient les arguments de la commande sous forme de chaines de caractères.
Par exemple si vous lancez le programme main.exe de cette façon :
main.exe test 2 3
argc aura pour valeur 4, argv[0] la chaine "main.exe", argv[1] "test", argv[2] "2", argv[3] "3", on a donc nos quatre arguments de la commande.
"Mon idée c'était de compter le nombre de lignes (ou colonnes) dans un fichier"
Vous pouvez utiliser cette méthode ou celle de la récupération des arguments de la commande ou les deux si vous n'utilisez pas de scanf ou autre pour avoir le nom du fichier. Créez une fonction qui détermine la "tailleTableau" à partir d'un fichier et retourne la valeur sous forme d'un int, exemple de prototype :
int recup_tailleTableau(char *nomdufichier)
En utilisant cette fonction au début du main ça vous permettra de récupérer la tailleTableau et vous pouvez aussi passer le fichier en argument du programme qui sera récupéré dans le main avec l'aide des params argc et argv :
int main(int argc,char *argv[]){ int tailleTableau; if(argc == 2){ tailleTableau = recup_tailleTableau(argv[1]); /* ... */ } return 0; }
si argc == 2 ça veut dire que la commande doit contenir deux arguments : le nom du programme (ex : main.exe) et un argument supplémentaire.
argv[0] contient le nom du programme et argv[1] contiendra le second arg le nom du fichier, ex :
main.exe lefichier.txt
argc = 2
argv[0] = "main.exe"
argv[1] = "lefichier.txt"