[printf]C/unix

Résolu/Fermé
Signaler
Messages postés
31
Date d'inscription
vendredi 25 novembre 2005
Statut
Membre
Dernière intervention
4 février 2006
-
 ced -
salut a tous,
mon probleme est le suivant: je dois recoder la fonction printf alors si vous pouviez m'aider a le faire je vous serai vraiment reconnaissant.merci d'avance de bien vouloir aider un vrai debutant.

8 réponses

Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
176
salut, pour le nombre variable d'arguments, on utilise l'entete stdarg.h, tas une petite explication ici http://homepage.mac.com/pierremousel/LangC/LangCArgumentsVar.html

Si tu maitrises cette techique le reste sera juste du cas par cas.
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
31
Date d'inscription
vendredi 25 novembre 2005
Statut
Membre
Dernière intervention
4 février 2006
18
j'ai vu le lien, effectivement c'est ce qui est autorise pour le code, mais je ne suis pas vraiment en mesure d'utiliser pour recoder mon printf et c'est le gros probleme.
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 521
Le premier argument de printf c'est le format.
Avec la chaine du genre "machin %s bidule"

Donc là il faut que tu prennes chaque caractère l'un après l'autre pour le mettre dans un buffer (une variable tableau, dynamique de préférence, donc à allouer avec malloc() et realloc() s'il le faut par la suite).
Et dés que tu tombes sur un '%' alors il faut analyser la lettre après. En fonction de ça il faut aller chercher l'argument correspondant et le formatter.
Par exemple si c'est un %s, tu prends l'argument correspondant, normalement un pointeur vers un tableau de caractère, et tu charges son contenu dans le buffer.
Si c'est un %d, là tu as affaire à une variable dont la valeur devra être convertie en ascii avant d'être chargée dans le buffer.

J'espère que tu as déjà vu ce genre de trucs en cours...

Pour d'autres arguments comme %f, donc un float je ne vois pas trop comment faire par contre.
pour la sortie écran utlise putchar
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 521
Salut,

Sous quel système d'exploitation? Quelle version de Php?
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 521
Oups pardon, me suis gourré de message. (Chais pas comment j'ai fait mais bon....).

Ben du coup je vais essayer de répondre à ta question.
En fait tout dépend des fonctions que tu as le droit d'utiliser.
Est ce que tu as droit d'utiliser sprintf() ou fprintf() ?
Est ce que tu as le droit d'utiliser fwrite()?

Par contre je pourrais pas t'aider en ce qui concerne le nombre d'arguments indéfini en entrée de printf(). Je sais pas comment on fait.
Messages postés
31
Date d'inscription
vendredi 25 novembre 2005
Statut
Membre
Dernière intervention
4 février 2006
18
non je n'ai pas le droit d'utiliser fprintf et sprintf
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 521
Et fwrite?
a la place de printf() tu fait cout<<".... ";
>
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016

eh ben mm pour le c ca marche
simplement fait un test !!!
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
176 > toto
le cout c'est juste pour le C++. Le C ne les connais pas.
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 521 >
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016

kilian@Tourte:~/Desktop$ gcc test.c -o test
test.c:1:22: error: iostream.h: Aucun fichier ou répertoire de ce type
test.c: In function 'main':
test.c:5: error: 'cout' undeclared (first use in this function)
test.c:5: error: (Each undeclared identifier is reported only once
test.c:5: error: for each function it appears in.)


Même chose si j'enlève le .h de iostream.
Après, je ne sais pas, peut être que je n'ai pas la bibliothèque manquante....

EDIT: en fait si je l'ai, mais elle n'est prise en compte que par g++ (donc mon compilateur c++, mais pas par gcc, mon compilateur c)
Messages postés
31
Date d'inscription
vendredi 25 novembre 2005
Statut
Membre
Dernière intervention
4 février 2006
18 >
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016

mais franchement moi je ne comprend rien de tout ce ke vous ecrivez la vous pouvez m'expliquer un peu s'il vous plait? merci.
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 521 >
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016

En fait en C++, tu peux afficher quelque chose à l'écran en faisant comme ceci:
cout << "truc à afficher";

Pour moi c'est du C++ et pas du C, mais je me trompe peut être.

En tout cas, on ne t'aurais pas donné cet exercice si c'était aussi simple :-)
en ce que concerne le cout<< ca marche pour le c et pour le c++
tout mes tp du langage c sous unix je les fait avec cin et cout
Messages postés
31
Date d'inscription
vendredi 25 novembre 2005
Statut
Membre
Dernière intervention
4 février 2006
18
je voudrais savoir cmt utiliser les varicaps pour recoder printf
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 521
Tu as lu ce que j'ai ecris au dessus?