Un erreur dans mon code...

Résolu
Mathematix Messages postés 51 Date d'inscription   Statut Membre Dernière intervention   -  
Mathematix Messages postés 51 Date d'inscription   Statut Membre Dernière intervention   -
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.
A voir également:

2 réponses

Watterbutter Messages postés 76 Date d'inscription   Statut Membre Dernière intervention   27
 
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
Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
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
Mathematix Messages postés 51 Date d'inscription   Statut Membre Dernière intervention   8
 
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