Question de débutant [C]

Salut à vous les programmeurs!

Actuellement j’étudie le langage C et je me sers pour l’instant de deux fonctions d’entrée à savoir printf et puts, et tout va bien…

Ce matin j’ai demandé à mon prof d’algo si il y avait une différence et apparemment non…

Je voulais tout de même vous demander à VOUS, si vous connaissez les différences éventuelles ? Car ça me paraît légèrement étrange qu’il y ai deux fonctions pour la même chose mais sans différences (visibles ?).

Voilà :mrgreen: Merci bien!

:unamused:
Elles ont même pas le même profile… :confused:
printf est une fonction plus évoluée avec la quel tu peut formater ton affichage. Il semble que ça ne soit pas le cas des fonctions puts.

Effectivement, le point commun est d’écrire dans la console, mais …

comme son prototype l’indique écrit une chaîne de caractères prédéfinie avant l’éxécution et effectue un saut de ligne.
et

permet d’écrire une chaine dont certaines données de sont pas définies au moment de l’écriture du code et le saut de ligne n’est pas automatique.
exemple :

[code]int n = 2;

printf(“n vaut %d”, n);
n = 5;
printf(“n a changé, il vaut maintenant %d”, n);
[/code]
chaque ensemble de la chaine commençant par % est remplacé par une variable indiquée comme paramètre.
Tu peux regarder sur le site du zéro ou sur developpez.net pour bien débuter en C.

Bon courage

[quote=“ymer”]je me sers pour l’instant de deux fonctions d’entrée à savoir printf et puts, et tout va bien…[/quote]Pour moi ce sont des fonctions de sorties. Elles affichent toutes les deux sur la sortie standard.

Quand tu as des questions de ce type cherche la réponse dans un bon bouquin de C. Ça évite d’entendre les incompréhensions de certains d’une façon générale.

Brian (non, non pas celui qui est dans la kitchen) a écrit un bouquin dessus avec l’aide de l’un des créateurs du C Ritchie.

[quote=“dmon”][quote=“ymer”]je me sers pour l’instant de deux fonctions d’entrée à savoir printf et puts, et tout va bien…[/quote]Pour moi ce sont des fonctions de sorties. Elles affichent toutes les deux sur la sortie standard.

Quand tu as des questions de ce type cherche la réponse dans un bon bouquin de C. Ça évite d’entendre les incompréhensions de certains d’une façon générale. [/quote]

:question:

  • puts ne figure pas dans le bouquin (The C programming language) de Ritchie/kerninghan (que j’ai sur les genoux), au contraire de printf mais fait partie de la libc.
  • puts affiche une ligne sur la sortie standard en la complétant par un retour de ligne à la fin.

Je ne vois pas où il y a eu incompréhension.

Oui, jme suis trompé :smt002

Bon, j’ai maintenant compris la différence grâce à vos explications. C’est juste qu’on a vu puts() en TD et que le prof n’a même pas mentionné cette différence avec printf(). Je lis aussi le cours du site du zéro et je suis arrivé aux boucles et on ne parle pas de puts() :confused:

Mais je compte voir ce week pour me prendre un bouquin. :wink:

Merci à tous en tout cas. :stuck_out_tongue:

page 162 chapitre 7.7 et page 252 chapitre B1.4

[quote=“fran.b”]Je ne vois pas où il y a eu incompréhension.[/quote]Pas encore. Mais ça, ça fait partie de ma maintenance préventive; anticiper les erreurs et les mauvaises démarches.

Moi c’est «The C Programming Language, Kerninghan et Ritchie Prentice-Hall Software Series», il n’en parle pas (le 7.7 est «Error Handling») par contre fputs et fgets sont évoqués au chapitre 7.8, il n’y a pas d’appendice B. Mais ce que j’ai est le livre qui était fourni avec les systèmes Unix sur PDP11 et date de 1981 donc c’est la première édition. Si tu as une traduction de ce bouquin, tu dois avoir la seconde édition (de 1988). C’est amusant car c’est la première véritable différence importante que je vois entre les deux éditions.

C’est ton édition qui fait foi bien sûr pour le ANSI C donc puts fait partie du C ANSI.

Pour le reste, je te laisse juge

man est puissant aussi pour comprendre ce que fait une fonction.

gcc reconnaît puts comme ansi. J’ai pas de grosse référence du C je m’en prendrais peut être une un de ses quatre.

:open_mouth: Exact! Plutôt cool ça :mrgreen:

Merci 8)

par contre j’ai remarqué que printf était généralement remplacé par puts au moment de l’assemblage. (dans le code assembleur)

Il semblerait qu’il appelle puts si aucun paramètre n’est passé à la fonction :

[code]#include <stdio.h>

int main(int argv, char** argc)
{
int i = 0;
printf("%d\n", i);

 printf("hello world\n");

}[/code]

Extrait du code généré :

.LC0:
	.string	"%d\n"
.LC1:
	.string	"hello world"
[...]
	mov	DWORD PTR [esp], OFFSET FLAT:.LC0
	call	printf
	mov	DWORD PTR [esp], OFFSET FLAT:.LC1
	call	puts
[...]

Il fait un appel à printf lorsque je lui demande d’afficher l’entier i.
Il fait un appel à puts lorsque je lui demande d’afficher la chaîne “hello world”.

bien vu