Un erreur dans mon code...

Résolu
Bonjour à tous,

Je suis actuellement en train d'apprendre à programmer en C, et j'essaie de résoudre cet exercice :
"Ecrire un programme qui échange deux entiers saisis. Afficher les entiers avant et après l'échange."

Cet exercice étant très facile, j'ai décidé d'y intégrer une fonction, et donc des pointeurs (pour cet exercice), voici donc mon code :

/*
Ecrire un programme qui échange deux entiers saisis. Afficher les entiers
avant et après l'échange.
*/

#include <stdio.h>

int change(int *n1, int *n2);

int main(void)
{
	int n1, n2;

	int *premier = &n1;
	int *second = &n2;

	printf("Premier nombre : "); scanf("%d", n1);
	printf("Second nombre : "); scanf("%d", n2);

	printf("Voici les nombres interchangés : \n");

	int change(int &premier, int &second);

	printf("Permier nombre : "); printf("%d\n", *premier);
	printf("Second nombre : "); printf("%d\n", *second);

	return 0;
}

int change(int *premier, int *second)
{
	int a;
	*premier = *second;
	*second = a;
}




Mais mon compilateur (gcc à la dernière version) m'affiche une erreur que je n'arrive pas à déboguer :

2.c: In function 'main':
2.c:22:17: error: expected ';', ',' or ')' before '&' token
int change(int &premier, int &second);
^

(Le "^" est mal placé, il devrait se trouver juste au dessous du &premier.)

Elle correspond à cette ligne là :
int change(int &premier, int &second);


C'est la ligne qui appelle la fonction change donc...

Est-ce que quelqu'un pourrait m'aider ?

Merci d'avance.

2 réponses

  1. Bonsoir !
    J'ai plus pratiqué en c#, mais je pense qu'à la ligne 22, entre les paranthèse, le type ne devrait pas être affiché car ce serait re-déclarer
    la variable. Essaye ça et tiens moi au courant !

    Bon courage !
    0
    1. Bonjour,

      Lignes 17 et 18, un
      scanf()
      a besoin de l'adresse comme comme toute fonction modifiant des paramètres, il faut ajouter un
      &
      devant.
      Ligne 22, utilisation d'une fonction, il ne faut aucune indication de type, lève les 3
      int
      . Et il faut passer des pointeurs pas l'adresse de pointeurs donc :
      	change(premier, second);
      	change(&n1,  &n2);  // ou bien, ce qui revient au même
      
      Ligne 32, ta fonction
      change()
      , n'effectue pas un échange, tu lis la variable
      a
      alors que tu n'as rien mis dedans au début.
      0
      1. Merci beaucoup Dalfab,

        L'erreur de compilation ne provenait pas de l'oublie du & (vous me pardonnez, je suis débutant ;-) ) dans la fonction
         scanf() 
        , mais elle venait des int pour chaque pointeur dans la fonction et du int avant la fonction...

        Et puis, pour l'erreur de l'inversion des deux nombres : je n'avais pas plus vérifier le code car il y a eu une erreur de compilation (je ne suis qu'un "programmeur" novice).

        Voici donc le code qui fonctionne correctement :

        /*
        Ecrire un programme qui échange deux entiers saisis. Afficher les entiers
        avant et après l'échange.
        */
        
        #include <stdio.h>
        
        int change(int *n1, int *n2);
        
        int main(void)
        {
        	int n1, n2;
        
        	int *premier = &n1;
        	int *second = &n2;
        
        	printf("Premier nombre : "); scanf("%d", &n1);
        	printf("Second nombre : "); scanf("%d", &n2);
        
        	printf("Voici les nombres interchangés : \n");
        
        	change(premier, second);
        
        	printf("Permier nombre : "); printf("%d\n", *premier);
        	printf("Second nombre : "); printf("%d\n", *second);
        
        	return 0;
        }
        
        int change(int *premier, int *second)
        {
        	int a;
        
        	a = *premier;
        	*premier = *second;
        	*second = a;
        }
        


        Merci encore pour vos réponses !
        0