FORUM Tom's Hardware » Programmation » C / C++ / Java » ligne de commande : help!!
 

ligne de commande : help!!

Il y a 423 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : ligne de commande : help!!
 
Plus d'informations

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



Code :
  1. #include <stdio.h>
  2.   #include <string.h>
  3.  
  4.  
  5.  
  6.  
  7.   int main ()
  8.  
  9.   {
  10.       size_t length;
  11.       char tab1[80],tab2[80]; 
  12.       int d,e,tab3[80],tab4[80];
  13.       int i,a=0,b=0;
  14.    
  15.        
  16.       printf("\nPremier nombre binaire\n" );
  17.       gets(tab1);
  18.       length = strlen(tab1);
  19.       d=length;
  20.    
  21.       printf("\nSecond nombre binaire\n" );
  22.       gets(tab2);
  23.       length = strlen(tab2);
  24.       e=length;
  25.    
  26.       if (d>=e) {
  27.           for (i=d-1; i>=d-e; i--) {tab4[i]=tab2[i-(d-e)]-48;};
  28.           for (i=d-e-1; i>=0; i--) {tab4[i]=0;};
  29.           for (i=d-1; i>=0; i--) {tab3[i]=tab4[i]+tab1[i]-48+a;
  30.               if (tab3[i]==0) {tab3[i]=0;a=0;};                         
  31.               if (tab3[i]==1) {tab3[i]=1;a=0;};
  32.               if (tab3[i]==2) {tab3[i]=0;a=1;};
  33.               if (tab3[i]==3) {tab3[i]=1;a=1;};
  34.           };
  35.           printf("\nLa somme des 2 nombres est :\n" );
  36.           if (a==1) {printf("1" );};                         
  37.           for(i=0; i<=d-1; i++) printf("%d", tab3[i]);
  38.       }; 
  39.      
  40.       if (d<e) {
  41.           for (i=e-1; i>=e-d; i--) {tab4[i]=tab1[i-(e-d)]-48;};
  42.           for (i=e-d-1; i>=0; i--) {tab4[i]=0;};
  43.           for (i=e-1; i>=0; i--) {tab3[i]=tab4[i]+tab2[i]-48+b;
  44.               if (tab3[i]==0) {tab3[i]=0;b=0;};                         
  45.               if (tab3[i]==1) {tab3[i]=1;b=0;};
  46.               if (tab3[i]==2) {tab3[i]=0;b=1;};
  47.               if (tab3[i]==3) {tab3[i]=1;b=1;};
  48.           };
  49.           printf("\nLa somme des 2 nombres est :\n" );
  50.           if (b==1) {printf("1" );};                         
  51.           for(i=0; i<=e-1; i++) printf("%d", tab3[i]);           
  52.       }; 
  53.    
  54.    
  55.   }

"ultissime geek trekkie"
Plus d'informations

tu dois passer des arguments à la fonction main:

Code :
  1. int main(int argv, char *argc[])



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".


Message édité par drasche le 03-03-2004 à 17:51:56
Plus d'informations

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)

Code :
  1. int main(int argc, char **argv)



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.


Message édité par Fredos le 03-03-2004 à 18:16:47
"ultissime geek trekkie"
Plus d'informations

va falloir que je me remette vite au C :whistle:

Plus d'informations

drasche a écrit :

va falloir que je me remette vite au C :whistle:



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

Plus d'informations

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)?

"ultissime geek trekkie"
Plus d'informations

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

Plus d'informations

heu peut être lol
un strcpy[]??

Plus d'informations

Goldberg a écrit :

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)?




tu déclares tab1 et tab2 comme ça

Code :
  1. char * tab1=NULL, * tab2=NULL;
  2. if (argc != 3 )
  3. {
  4.     /* et pan ! une erreur d'usage dans ta face ! */
  5.     return 1;
  6. }
  7. tab1=argv[1];
  8. tab2=argv[2];
  9. /* ensuite c'est tout pareil */

Plus d'informations

ok merci j'ai compris ;-)


Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » C / C++ / Java » ligne de commande : help!!
 

Annonces Google