Un erreur dans mon code...

Résolu/Fermé
Mathematix Messages postés 51 Date d'inscription lundi 25 décembre 2017 Statut Membre Dernière intervention 12 janvier 2024 - 2 avril 2018 à 18:51
Mathematix Messages postés 51 Date d'inscription lundi 25 décembre 2017 Statut Membre Dernière intervention 12 janvier 2024 - 3 avril 2018 à 17:55
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 75 Date d'inscription jeudi 12 octobre 2017 Statut Membre Dernière intervention 5 avril 2018 27
Modifié le 2 avril 2018 à 21:48
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 dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
3 avril 2018 à 08:32
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 lundi 25 décembre 2017 Statut Membre Dernière intervention 12 janvier 2024 8
3 avril 2018 à 17:55
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