Petit problème sur unmini programme C

Fermé
mickmac Messages postés 413 Date d'inscription jeudi 25 août 2011 Statut Membre Dernière intervention 15 août 2019 - 30 oct. 2012 à 10:04
mickmac Messages postés 413 Date d'inscription jeudi 25 août 2011 Statut Membre Dernière intervention 15 août 2019 - 1 nov. 2012 à 13:43
Bonjour,
J'ai un tout petit programme et je bloque :Je doit renvoyé un entier et un caractère que l'utilisateur entre en argument

j'ai donc fais ça:
#include <stdio.h>
#include <stdlib.h>

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

{
int x;
int y ;

if(argc<2)
{
printf("Usage correct;<Nom progrramme><entier><charactere>");
return -1;
}
else
{
x=atoi(argv[1]);
y=atoi(argv[2]);

printf("vous avez choisi %d et %c \n",x,y);
return 0;
}
}


Mais mon programme ne m'affiche pas mon caractère et ça je ne comprend absolument pas pourquoi? Pouvez vous 'expliquer??

Merci beaucoup


2 réponses

DarkAurora Messages postés 417 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 21 janvier 2013 27
31 oct. 2012 à 08:47
La totalité de ton programme est présent?

Je ne vois pas ou tu interroge l'utilisateur pour recevoir les informations et je suppose que ta fonction est 'atoi', dans ce cas si le prototype est 'atoi('entier', 'caractère')' lorsque tu utilise ta fonction tu ne passe qu'un paramètre et donc tu ne récupère qu'un entier...
0
[Dal] Messages postés 6175 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 30 avril 2024 1 083
31 oct. 2012 à 09:38
atoi est une fonction de stdlib.h, et son prototype est int atoi ( const char * str );

http://www.cplusplus.com/reference/cstdlib/atoi/

l'utilisateur est sensé entrer les paramètres à la ligne de commande.


Dal
0
DarkAurora Messages postés 417 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 21 janvier 2013 27
31 oct. 2012 à 09:46
ok ok je ne connaissais pas, tu passes les deux entrées récupérer à une fonction qui converti tes string en int donc le premier paramètre que tu récupères doit être un entier tu n'a pas de soucis tu le prend, tu le convertis en int et tu l'affiche en %d, par contre le 2eme paramètre que tu rentre est un caractère, tu vas le convertir en int et tu essaye de l'afficher avec %c, je pense que si tu remplace ton %c par %d tu verras ton 2eme résultat afficher mais ça ne résoudras pas ton problème, je pense pas qu'un traitement soit nécessaire sur ta 2eme entrée
0
[Dal] Messages postés 6175 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 30 avril 2024 1 083
Modifié par [Dal] le 31/10/2012 à 09:46
Salut mickmac,

Si y doit accueillir un char, autant le déclarer comme tel :
    char y ;

Ensuite, vu que argv est un tableau de pointeurs sur des char, pour affecter un char provenant d'un élément du tableau, tu dois déréférencer le pointeur :
        y=*argv[2];

Cela devrait suffire.

Mais le contrôle d'erreur est minimal.

Par exemple, tu pourrais vérifier si le atoi pour x ne renvoie pas 0, ce qui indiquerait une erreur de conversion.

Enfin, utiliser strtol est sans doutes mieux : http://www.cplusplus.com/reference/cstdlib/strtol/


Dal
0
mickmac Messages postés 413 Date d'inscription jeudi 25 août 2011 Statut Membre Dernière intervention 15 août 2019 6
1 nov. 2012 à 13:43
Merci beaucoup je vais essayé ça dès que je pourrais. Il e semblais bien que c'était un problème de pointeur
Le x donne bien la valeur qu'il faut .
0