récupérer les arguments de argv en entier? [C] - C - Programmation
Marsh Posté le 06-06-2005 à 18:05:31
Code :
|
Marsh Posté le 06-06-2005 à 18:07:51
Et donc t'arrive pas a y arriver vu que ça marche pas ?
Ca se trouve
int mavaleur = (int) argv[1];
marche bien dans un autre prog (mais j'en doute), d'ou ton incompréhension du PB, je compatis.
Bon j'ai pas mal boule de crystal sur moi, a défaut tu peut faire peter les details.
PS : t'as essayé les fonctions de converstion de chaine en int ???
Marsh Posté le 06-06-2005 à 18:12:57
non, je n'ai pas essayé les conversions de chaines en int, et à vrai dire je ne les connais pas car je ne connais pas le C.
en fait ce qui me turlupine, c'est que j'essaie de faire un printf ("%d \n", mavaleur) ça me renvoi n'importe quoi, il n'y a que si je fait printf ("%s \n", mavaleur) que ça me renvoi le truc correctement, donc j'en ai conclu que c'était un string (un peu hativement).
bon voilà le code
Code :
|
en fait mon problème c'est que j'ai une Floating point exception (au niveau de if (i%(samplerate/samplesbysecond)==0) {) qd je lance le programme comme cela :
./fftux theevent-zoom.wav cho.raw 227 44100 2 10
donc je me suis dis que c'était un problème de types...
Marsh Posté le 06-06-2005 à 18:17:39
En C c'est pareil, les argv sont des chaines de caractères.. Je me souviens que j'ai programmé un algorithme pour convertir ça en Int.. Enfin, ça ne doit pas être bien compliqué.. Il a un nom cet algorithme (le nom de son créateur..), mais on peut le retrouver facilement.. Je chercherai dans mes cours ce soir quand je serais chez moi..
Au pire, tu prends une table ASCII, et t'improvise...
Marsh Posté le 06-06-2005 à 18:29:36
Déja juste un truc, l'indice d'un tableau commence par 0 !!!
Donc ça : argv[6] ça pointe sur le ... 7 éme argument
Marsh Posté le 06-06-2005 à 18:30:54
oui ça je savais ;-)
mais argv[0] c'est le prog lui même, donc les arguments, eux commencent à 1.
Marsh Posté le 06-06-2005 à 18:37:08
Ok par contre un conseil verifie ton nombre d'argument avant de faire le reste.
Ensuite
Code :
|
La si je ne m'abuse tu travaille sur les pointeurs et pas sur les valeur
Code :
|
La ça marche car les fonction reclame un pointeur sur une chaine
Marsh Posté le 06-06-2005 à 18:38:39
mais je demande que ça de bosser sur les valeurs, on les récupère comment?
Marsh Posté le 06-06-2005 à 18:47:56
C'etait dans le PS de mon premier message
Je t'aide encore un peu ---> atoi
Marsh Posté le 06-06-2005 à 19:32:32
ok j'ai vu que ça fonctionnait sur les fichiers, mais comment bosser sur les valeurs pour les autres paramètres?
j'ai peut-être mal vu mais t'as pas donner la soluce, si?
Edit : ah bah oui, j'avais mal vu ;-)
Marsh Posté le 06-06-2005 à 20:08:23
Haaaaaaaa oui !! atoi() !!! C'est ça, c'est exactement ça !! On peut utiliser ça, mais on peut aussi programmer un petit truc d'une dizaine de lignes pour faire la même chose.
Incroyable comme la mémoire peut jouer des tours... Et t'autais pas le nom du monsieur qui a inventé l'algo. par hasard ?
Marsh Posté le 06-06-2005 à 20:26:32
Non, atoi() est a eviter car cette fonction ne permet de detecter les cas d'erreur correctement. Utilises strtol() ou sscanf().
Marsh Posté le 07-06-2005 à 07:59:19
duch a écrit : j'ai fait un p'tit programme en C qui fonctionne bien qd je mets les paramètres en dur dans le programme (pour les tests) mais je n'arrive pas à utiliser les paramètres qui viennent de la ligne de commande. |
strtol() strtoul(). Fait de ton mieux, et poste ton code en cas de problèmes.
Marsh Posté le 07-06-2005 à 08:00:46
ritzle a écrit :
|
C'est une plaisanterie ?
Marsh Posté le 07-06-2005 à 10:13:57
elle est bonne, non?
bon déjà j'ai essayé avec atoi et ça marche, merci les gars.
J'essaierais ensuite d'ajouter des tests d'erreur.
Marsh Posté le 07-06-2005 à 13:25:21
Emmanuel Delahaye a écrit : C'est une plaisanterie ? |
ca n'affiche que le dernier chiffre. Pourtant je l'avais deja fait et ca fonctionnait
Marsh Posté le 06-06-2005 à 17:47:53
désolé pour la question stupide, mais j'ai fait un p'tit programme en C qui fonctionne bien qd je mets les paramètres en dur dans le programme (pour les tests) mais je n'arrive pas à utiliser les paramètres qui viennent de la ligne de commande.
Je dois utiliser des int et manifestement ils récupèrent les valeurs de argv en stringn comment les transformer en int?
j'ai essayé :
int mavaleur = (int) argv[1];
mais ça marche pô
EDIT : en fait c'est pas du C++ mon truc mais du C, non?
Message édité par duch le 06-06-2005 à 18:26:01