Petit problème sur unmini programme C

mickmac Messages postés 447 Statut Membre -  
mickmac Messages postés 447 Statut Membre -
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

A voir également:

2 réponses

DarkAurora Messages postés 443 Statut Membre 27
 
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 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 106
 
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 443 Statut Membre 27
 
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 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 106
 
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 447 Statut Membre 6
 
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