ligne de commande : help!!

  • Auteur de la discussion Goldberg
  • Date de début

Goldberg

Nouveau membre
Bonjour, voilà mon programme qui me permet d'additionner deux nombres écrits sous forme binaire

comment pourrais-je faire pour que j'introduise les deux nombres (premier nombre binaire et second nombre binaire) sur la ligne de commande et non plus ds le programme même?

ex : (si le programme s'appelle addition.exe)

je tappe : addtion.exe 110 100
et il apparait :

le premier nombre binaire est : 110
le second nombre binaire est : 100
leur somme binaire est : 1010
Au revoir



[cpp]


#include <stdio.h>
#include <string.h>




int main ()

{
size_t length;
char tab1[80],tab2[80];
int d,e,tab3[80],tab4[80];
int i,a=0,b=0;


printf("\nPremier nombre binaire\n");
gets(tab1);
length = strlen(tab1);
d=length;

printf("\nSecond nombre binaire\n");
gets(tab2);
length = strlen(tab2);
e=length;

if (d>=e) {
for (i=d-1; i>=d-e; i--) {tab4=tab2[i-(d-e)]-48;};
for (i=d-e-1; i>=0; i--) {tab4=0;};
for (i=d-1; i>=0; i--) {tab3=tab4+tab1-48+a;
if (tab3==0) {tab3=0;a=0;};
if (tab3==1) {tab3=1;a=0;};
if (tab3==2) {tab3=0;a=1;};
if (tab3==3) {tab3=1;a=1;};
};
printf("\nLa somme des 2 nombres est :\n");
if (a==1) {printf("1");};
for(i=0; i<=d-1; i++) printf("%d", tab3);
};

if (d<e) {
for (i=e-1; i>=e-d; i--) {tab4=tab1[i-(e-d)]-48;};
for (i=e-d-1; i>=0; i--) {tab4=0;};
for (i=e-1; i>=0; i--) {tab3=tab4+tab2-48+b;
if (tab3==0) {tab3=0;b=0;};
if (tab3==1) {tab3=1;b=0;};
if (tab3==2) {tab3=0;b=1;};
if (tab3==3) {tab3=1;b=1;};
};
printf("\nLa somme des 2 nombres est :\n");
if (b==1) {printf("1");};
for(i=0; i<=e-1; i++) printf("%d", tab3);
};


}

[/cpp]
 

drasche

Expert
tu dois passer des arguments à la fonction main:

[cpp]int main(int argv, char *argc[])[/cpp]

argv contient le nombre d'arguments reçus (ça ferait donc 2 dans ton cas)

et *argc[] est un tableau de chaînes contenant les arguments. Si ma mémoire est bonne, argc[0] contient la commande elle même, et sur l'index 1, tu trouveras ton premier argument (sous forme de chaîne) et ainsi de suite.

edit: si ma mémoire est bonne, le standard C requiert un "void main()" et non plus un "int main".
 

Fredos

Habitué
oui sauf qu'il est mieux de ne pas inverser les noms des arguments du main (argc pour arg count, et argv pour arg value)

[cpp]int main(int argc, char **argv)[/cpp]

et argc doit être égal à 3, puisque ta mémoire est bonne et qu'avec 0 arguments passés au programme, on a quand même un argument qui est le nom du programme.

Dans le programme d'origine il va aussi manquer des tests d'erreurs sur les chaînes pour vérifier que les caractères sont bien des chiffres.

Aussi, c'est pas très beau de mettre directement le code ascii du caractère 0. En le remplaçant par '0', ça marche aussi bien et c'est un poil plus lisible.
 

Fredos

Habitué
[citation=4921,1][nom]drasche a écrit[/nom]va falloir que je me remette vite au C :whistle:
[/citation]

Ca, c'est une bonne résolution :)
 

Goldberg

Nouveau membre
ok mais qd j'ai mes deux chaines argc[1] et argc[2]
comment puis-je faire pour remettre chaque caractère de la chaine ds mes deux tableaux (tab1 et tab2)?
 

drasche

Expert
bin si tu connais strlen, tu dois bien connaître d'autres fonctions de traitement de chaîne non? ;)
 

Fredos

Habitué
[citation=4947,1][nom]Goldberg a écrit[/nom]ok mais qd j'ai mes deux chaines argc[1] et argc[2]
comment puis-je faire pour remettre chaque caractère de la chaine ds mes deux tableaux (tab1 et tab2)?

[/citation]

tu déclares tab1 et tab2 comme ça

[cpp]char * tab1=NULL, * tab2=NULL;

if (argc != 3 )
{
/* et pan ! une erreur d'usage dans ta face ! */
return 1;
}

tab1=argv[1];
tab2=argv[2];

/* ensuite c'est tout pareil */[/cpp]
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 845
Membres
1 586 373
Dernier membre
https://forum.tomshardwar
Partager cette page
Haut