argv

argv - C++ - Programmation

Marsh Posté le 14-01-2006 à 18:27:01    

Salut,
 voila je recupere mon entre standars avec argv et je voudrais pouvoir le convertir en int.
C'est possible?
Je debute.
 

Reply

Marsh Posté le 14-01-2006 à 18:27:01   

Reply

Marsh Posté le 14-01-2006 à 18:41:04    

non. argv c'est les arguments en ligne de commande. std::cin l'entrée standard.
 
int i;
std::istringstream input("1" );
input >> i;

Reply

Marsh Posté le 14-01-2006 à 18:42:38    

ha ben je me suis mal exprime alors c'est les arguments en ligne de cmd que je veut convertir en int.

Reply

Marsh Posté le 14-01-2006 à 18:49:38    

Code :
  1. int main (int argc, char ** argv)
  2. {
  3.   //...
  4.   for (i = 1; i < argc; i++)
  5.     foo[i] = atoi (argv[i]);
  6.   //..
  7. }


Message édité par Zavie le 14-01-2006 à 18:53:57

---------------
Viendez vous battre à Prologin \o/
Reply

Marsh Posté le 14-01-2006 à 18:53:38    

c'est du putain de C de merde ça.

Reply

Marsh Posté le 14-01-2006 à 18:54:16    

Ouaip, j'ai complètement honte.


---------------
Viendez vous battre à Prologin \o/
Reply

Marsh Posté le 14-01-2006 à 18:57:18    

ouais mais ton tableau foo la il contient des char pas des int.non?

Reply

Marsh Posté le 14-01-2006 à 19:10:32    

quel genre d'argument ?  [:dawa_neowen]

Reply

Marsh Posté le 14-01-2006 à 19:13:24    

ben je veut faire des operation sur des valeur numerique que je donne a l'execution de mon programme:
./monprog 6 9 5  
et je recupere ces valeurs avec arvg[], mais le probleme c'est que je veut les passer en int pour pouvoir les traiter.


Message édité par thefakir le 14-01-2006 à 19:14:04
Reply

Marsh Posté le 14-01-2006 à 19:15:06    

Non non, ce sont bien des entiers (extrait du man : int atoi (const char *nptr);).
Mais comme le faisait remarquer Taz avec tact ;-) c'est l'écriture C.
 
Voici une autre version un peu plus plus :

Code :
  1. #include <iostream>
  2. #include <sstream>
  3. int main (int argc, char ** argv)
  4. {
  5.   for (int i = 1; i < argc; ++i)
  6.     {
  7.       std::istringstream foo(argv[i]);
  8.       int bar = 0;
  9.       foo >> bar;
  10.       std::cout << bar + 1 << std::endl;
  11.     }
  12.   return 0;
  13. }



---------------
Viendez vous battre à Prologin \o/
Reply

Marsh Posté le 14-01-2006 à 19:15:06   

Reply

Marsh Posté le 14-01-2006 à 19:18:21    

ok merci je vais essayer ca.
et foo tu la declare en quoi?


Message édité par thefakir le 14-01-2006 à 19:24:08
Reply

Marsh Posté le 14-01-2006 à 19:28:52    

std::istringstream, locale à la boucle, et initialisée à argv[i].


---------------
Viendez vous battre à Prologin \o/
Reply

Marsh Posté le 14-01-2006 à 19:33:14    

j'ai une erreur a la compil

Code :
  1. sum.cpp: In function ‘int main(int, const char**)’:
  2. sum.cpp:39: error: variable ‘std::istringstream foo’ has initializer but incomplete type
  3. make: *** [sum.o] Erreur 1


il faut declare quelque chose pour utilise std::istringstream?


Message édité par thefakir le 14-01-2006 à 19:34:36
Reply

Marsh Posté le 14-01-2006 à 19:47:58    

Mieux encore pour la détection d'erreur

Code :
  1. #include <iostream>
  2. #include <sstream>
  3. int main (int argc, char ** argv)
  4. {
  5.      for (int i = 1; i < argc; ++i)
  6.      {
  7.         std::istringstream foo(argv[i]);
  8.         int bar;
  9.         if (foo >> bar)
  10.           std::cout << bar + 1 << std::endl;
  11.         else
  12.           std::cerr << argv[i] << " n'est pas un entier\n";
  13.      }
  14.      return 0;
  15. }

Reply

Marsh Posté le 14-01-2006 à 19:49:50    

ok, c'est bon il me manquer la librairie include <sstream>.
Merci!!

Reply

Marsh Posté le 14-01-2006 à 20:33:45    

pourquoi pas ecrire

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


?

Reply

Marsh Posté le 14-01-2006 à 20:36:05    

parce que c'est un pointeur vers un tableau, donc *argv[] ou **argv, et que les arguments d'entrée sont toujours des chaines de caracteres, donc char *argv[] ou char **argv

Reply

Marsh Posté le 14-01-2006 à 21:48:37    

c'est pas un pointeur vers un tableau, c'est un pointeur de pointeur de char. char *argv[] et char **argv. c'est la même chose. après le système de fourni les arguments sous forme de chaine de caractères, c'est comme ça :)

Reply

Marsh Posté le 14-01-2006 à 21:50:20    

merci ritzle, merci Taz

Reply

Marsh Posté le 14-01-2006 à 21:51:06    

et encore moi, j'ai une petite question, voia apres avoir choper ce que je met en ligne de commande, je fais la somme de tout ca avec:

Code :
  1. cout << std::accumulate(items.begin(), items.end(), 0) << endl;


mais je voudrais voir chaque etape c'est a dire mettre ca dans une boucle et modifier items.end() en le faisant commence sur le premier truc de mon vector et en l'incrementant jusqu'a arrivée a items.end()
Mais je sais pas du tout comment mis prendre.


Message édité par thefakir le 14-01-2006 à 21:52:36
Reply

Marsh Posté le 15-01-2006 à 12:01:55    

for( (letype de items)::const_iterator it=items.begin();it !=items.end();it++)
{
//ton code, et tu récupère le contenu ac *it
}
 

Reply

Marsh Posté le 15-01-2006 à 14:11:14    

merci

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed