Programme nom

Fermé
amn - 18 sept. 2013 à 07:57
juliencolin54 Messages postés 217 Date d'inscription dimanche 22 juillet 2012 Statut Membre Dernière intervention 1 octobre 2013 - 18 sept. 2013 à 16:58
Bonjour,

je dois faire un programme qui renvois le nom de ce programme, et j ai beaucoup de mal... j ai fais comme ca, si vous pouvez me dire ce qui ne va pas, merci. Le ft_putchar est la seule fonction autorisee. Donc la premiere fonction est pour declarer e ft_putchar, la deuxieme le int main pour lancer le programme, et la troisieme pour renvoyer le nom. Quand j essaie de lancer le programme j ai le message d erreur suivant : overflow in implicit constant conversion et je ne comprend pas vraiment ce que ca veut dire. Merci d avance pour votre aide.

#include <unistd.h>

int ft_putchar(char c)
{
write(1, &c, 1);
return (0);
}

int main (void)
{
ft_putchar;
}


int name (void)
{
ft_putchar('name');
return (0);
}

11 réponses

juliencolin54 Messages postés 217 Date d'inscription dimanche 22 juillet 2012 Statut Membre Dernière intervention 1 octobre 2013 55
18 sept. 2013 à 10:49
Bonjour,

Tu as beaucoup de modifications à faire, et de choses à apprendre, à mon avis.
Dans l'ordre :
1. Si tu déclares un
int main(void)
, tu ne pourra pas récupérer le nom du programme.
En effet, il faut déclarer
int main(int ac, char **av)
pour pouvoir accéder au nom de ton programme qui se trouve dans av[0]
2. Tu appelles ta fonction comme ceci
ft_putchar;
alors qu'elle est sensé prendre un paramètre (un caractère) et l'afficher à l'écran.
Tu dois donc l'appeler comme ceci :
ft_putchar('A'); 
(pour afficher un a majuscule à l'écran
3. Ta fonction
int name (void)
n'est appelée nulle part dans ton code.
4.
'name'
est différent de
"name"
, ils désignent respectivement un caractère et une chaîne de caractères.
5. Ajoute un
return 0;
à la fin de ton main().
Il n'est pas primordial pour ton programme, mais est utile pour le terminal qui lance ton programme, ainsi il sait si ton code s'est bien exécuté ou pas.

N'hésites pas si tu as besoin d'aide,
Cdlt.
0
Salut ! Je te remercie pour ta reponse, je ne suis pas sur d avoir tout bien saisi j ai tester comme ceci, je me doute qu il doit y avoir pas mal d erreurs mais je fais plusieurs test je finirais bien par comprendre...
pour le *k j ai essayer de faire un pointeur que l on va rappeler pour afficher le nom de la fonction est ce bon ? Par contre j ai du mal a le mettre correctement en forme.


#include <unistd.h>

int ft_putchar(char c)
{
write(1, &c, 1);
return (0);
}

int main (int *k)
{
ft_putchar;
return (0);
}


int name (int *k)
{
*k = name;
ft_putchar(k);
return (0);
}
0
juliencolin54 Messages postés 217 Date d'inscription dimanche 22 juillet 2012 Statut Membre Dernière intervention 1 octobre 2013 55
Modifié par juliencolin54 le 18/09/2013 à 13:54
Relis les points 1 et 2 que je t'ai donné, je te donne le code en plus.
Ce n'est qu'un simple copier/coller pour corriger ces erreurs là.

Sinon, à quoi sert ta fonction name ?
Est-ce que tu veux afficher le nom de la fonction ou le nom du programme ?
Est-ce que tu connais les boucles while ?

Software is like sex, it's better when it's free - Linus Torvald
0
C est pour afficher le nom du programme, j ai mis name justement pour cela ce n est pas necessaire ? Avec main c est suffisant ? Oui je connais les boucles je dois m en servir ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
juliencolin54 Messages postés 217 Date d'inscription dimanche 22 juillet 2012 Statut Membre Dernière intervention 1 octobre 2013 55
18 sept. 2013 à 14:26
Le nom de ton prgramme se situe ici :
int main(int ac, char **av)
{
char *prog_name;

prog_name = av[0];
// Ici , av[0] ou prog_name valent le nom de ton programme
return (0);
}

Ta fonction ft_putchar permet d'afficher un caractère à l'écran, tu peut l'essayer comme ceci :
int ft_putchar(char c)
{
write(1, &c, 1);
return (0);
}

int main(int ac, char **av)
{
char *prog_name;

prog_name = av[0];
// Ici , av[0] ou prog_name valent le nom de ton programme
ft_putchar('A'); // imprime le caractère 'A' a l'ecran
return (0);
}

Ce qu'il te manque, c'est une fonction pour afficher une chaîne de caractère à l'écran, et non pas un seul caractère.
0
A quoi correspondent exactement ac et av ? Et pourquoi il y a deux etoile devant av ?

Une fonction pour afficher une chaine de caractere ? comme celle de ft_putchar ? Si je met ft_putchar("nomduprogramme") ce n est pas bon ?
0
juliencolin54 Messages postés 217 Date d'inscription dimanche 22 juillet 2012 Statut Membre Dernière intervention 1 octobre 2013 55
18 sept. 2013 à 15:13
Pour ac et av, c'est assez bien expliqué ici : http://picolibre.int-evry.fr/projects/svn/coursc/Tex4Ht/Indexse44.html
Si t'as des question, n'hésites pas.

Comme je te l'ai dit ft_putchar() ne prend qu'un caractère et non pas une chaîne de caractère !

Pour afficher une chaîne de caractère, il faut que tu fasses une boucle sur celle-ci, et appeler ft_putchar() avec chaque caractère de ta chaîne.

0
Donc ca va donner

int ft_nom(int k)
k = 0;
while (k > 0);
k++;

?
0
juliencolin54 Messages postés 217 Date d'inscription dimanche 22 juillet 2012 Statut Membre Dernière intervention 1 octobre 2013 55
18 sept. 2013 à 16:24
Fais un effort, compile au moins ton code.
Il manque des accolades de fonction, ta boucle while non plus n'a pas d'accolades et vu qu'elle a un ";" juste derrière, c'est une boucle infinie...

Je te conseille d'aller lire des cours de C car on y arrivera jamais si tu ne sais pas faire une boucle while :/
0
Je sqis bien qu il faut les accolades c etait juste pour savoir si ce code etait bon, hors norme
0
juliencolin54 Messages postés 217 Date d'inscription dimanche 22 juillet 2012 Statut Membre Dernière intervention 1 octobre 2013 55
18 sept. 2013 à 16:58
Dans ce cas met les ça coute pas grand chose !
Dans l'esprit c'est ça, sauf que tu initialise ton k à 0, et que dans ta boucle tu dis "tant que k supérieur à 0", donc ça ne passe pas dans le while.
0