Partage
  • Partager sur Facebook
  • Partager sur Twitter

je n'arrive pas à afficher les entiers

Sujet résolu
20 janvier 2020 à 22:50:21

#include <stdio.h>
#include <stdlib.h>

void ranger(int nb1, int nb2) {
	
	int tmp = 0;
	
	if (nb2 < nb1) {
		tmp = nb1;
		nb1 = nb2;
		nb2 = tmp;
	}
	
	printf("nb1 = %d\n", &nb1);
	printf("nb2 = %d", &nb2);

}

int main() {
	
	int nb1 = 10;
	int nb2 = 5;
	
	ranger(nb1,nb2);

	return 0;
}

Voici mon code le but du programme est que nous avons nb1 et nb2 qui sont des entiers donnés et on doit juste mettre le plus petit entier dans nb1 et le plus grand dans nb2, le problème c'est qu'il m'affiche ça.

 

Pouvez-vous m'aider ?

Merci d'avance

  • Partager sur Facebook
  • Partager sur Twitter
20 janvier 2020 à 23:02:38

Salut,

Enlève les esperluettes (&) dans tes printf().

Bonne continuation.

  • Partager sur Facebook
  • Partager sur Twitter

Bonhomme !! | Jeu de plateforme : Prototype.

20 janvier 2020 à 23:04:15

pourrai-je avoir des mini détails de pourquoi je dois mettre le & et parfois pas ou même juste la différence parce que d'habitude ça marche dans mon main mais là non

  • Partager sur Facebook
  • Partager sur Twitter
21 janvier 2020 à 0:07:57

Bonjour

On vous a dit à quoi servait l'opérateur  & ? 

Je serait très étonné que l'on ne vous l'ai jamais dit mais bon...

int x=1;  attribue la valeur 1 à la variable x de type int

x donne cette valeur

&x donne l'adresse où est mémorisée cette variable

si vous envoyez  &x à votre printf il affichera l'adresse de la variable x et il faudra employer un autre drapeau pour cela

  • Partager sur Facebook
  • Partager sur Twitter
21 janvier 2020 à 0:11:43

Bien entendu.

Pour bien comprendre cela, il faut être arrivé aux pointeurs. Un pointeur est l'adresse en mémoire d'une variable, on peut voir ça comme un numéro de tiroir où est rangé le contenu de la variable.

int variable = 5 -> le programme stock la valeur 5 dans un tiroir étiqueté "variable" qui a un numéro quelconque.

Lorsque l'on met l'esperluette devant une variable, cela signifie : "l'adresse de".

Dans ce cas &valeur n'est pas maitrisable, c'est le programme qui choisi les adresses auxquelles il range les variables, tu peux donc simplement l'interroger. Quand tu écris &variable, la réponse est "le contenu de variable est rangé dans le tiroir 34772"

Le printf n'a besoin que de savoir quelle valeur il doit afficher, donc ce que contient variable, pas l'endroit où c'est rangé.

Pour bien piger l'intérêt des pointeurs, tu peux faire des recherches sur la portée des variables en C. Il faut comprendre que lorsqu'on envoie un argument à une fonction, cette dernière reçoit une copie, donc si elle modifie le contenu de la copie, l'original (dans la fonction appelante) ne sera pas modifiée. printf n'apporte pas de modification aux arguments qu'il reçoit, donc une copie fait l'affaire. Si tu envoies la valeur 5, il affiche 5 sans avoir à le transformer en 6, ce n'est pas ce qu'on lui demande.

Lorsque tu utilises &variable dans un scanf par exemple, je suppose que c'est ce à quoi tu fais allusion, la fonction va devoir modifier la valeur de la variable, donc on lui envoie l'adresse pour lui dire :"range le résultat dans le tiroir 34772".

Bonne continuation.

  • Partager sur Facebook
  • Partager sur Twitter

Bonhomme !! | Jeu de plateforme : Prototype.

21 janvier 2020 à 1:38:43

@drx:
Tu es un très bon pédagogue! Je n'aurais pas pensé à l'analogie avec les tiroirs.
C'est comme quand on envoie une lettre au "casier postal 300". La lettre est ton entier et le numéro de casier est l'adresse.
  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

21 janvier 2020 à 8:15:23

Pour chipoter, un pointeur est UNE VARIABLE qui contient une adresse.

  • int toto;  déclare une variable
  • & toto  est une expression qui est une adresse d'entiers
  • int *ptr;  est une variable, a qui on peut affecter &toto, c'est donc un pointeur.

C'est un des problèmes de l'enseignement de C à des débutants : on a besoin de la notion d'adresse très tôt, dès qu'on a besoin de faire lire des entiers, ce qui est un élément des exercices de base habituels (entrez deux nombres, afficher la somme).

Et les pointeurs apparaissent comme paramètres des fonctions que l'on déclare, et qui ont besoin de simuler un passage par référence. Exemple, pour échanger deux variables, on écrit une fonction qui reçoit leurs adresses, dans des paramètres qui sont des pointeurs.

Ca fait partie de la base pour commencer à programmer en C,  mais ça n'oblige absolument pas, à ce stade, à se taper des considérations sur l'allocation dynamique et les structures chaînees. Ce qu'on appelle "faire les pointeurs".

  • Partager sur Facebook
  • Partager sur Twitter