"Pointeur et printf", phénomène que je ne m'explique pas!!!
Résolu
evilfalcon
Messages postés
58
Date d'inscription
Statut
Membre
Dernière intervention
-
evilfalcon Messages postés 58 Date d'inscription Statut Membre Dernière intervention -
evilfalcon Messages postés 58 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je suis en train de créer un programme très simple de calcul! Un menu, avec des choix: addition, soustraction, multiplication et division! Rien de bien compliqué en somme.
Je veux faire ça bien, donc j'utilise des .h pour chaque choix de mon menu!
Je suis à la soustraction et je suis face à un phénomène que je ne comprend pas!
Dans le programme, j'ai mis en avant le printf bizarre:
Si je ne demande pas d'afficher l'adresse de mes variables somme[0], somme[1] et negative, j'obtient après le if que somme[1] = négative, inversement quand je l'ai affiche pas de problème, negative et somme[1] sont bien différent.
Je ne comprend pas, je suppose juste que &somme[1] = &negative, mais je vois pas pourquoi et encore moi comment!!
voila le programme concerné:
Merci par avance! Si vous avez une réponse à mon problème!
Evilfalcon
je suis en train de créer un programme très simple de calcul! Un menu, avec des choix: addition, soustraction, multiplication et division! Rien de bien compliqué en somme.
Je veux faire ça bien, donc j'utilise des .h pour chaque choix de mon menu!
Je suis à la soustraction et je suis face à un phénomène que je ne comprend pas!
Dans le programme, j'ai mis en avant le printf bizarre:
Si je ne demande pas d'afficher l'adresse de mes variables somme[0], somme[1] et negative, j'obtient après le if que somme[1] = négative, inversement quand je l'ai affiche pas de problème, negative et somme[1] sont bien différent.
Je ne comprend pas, je suppose juste que &somme[1] = &negative, mais je vois pas pourquoi et encore moi comment!!
voila le programme concerné:
#include <stdio.h> #include <stdlib.h> #include "saisie.h" #include "cal_add.h" #include "reduction.h" void soustraction (int choix_menu, int tab_chiffre[3]) { int somme[1]; int negative = 0; printf("|********soustraction********|\n"); saisie(tab_chiffre); tab_chiffre[2] = -tab_chiffre[2]; cal_add(tab_chiffre, somme); //negative = 0; //printf("somme[0] = %d, somme[1] = %d, negative = %d \n",somme[0], somme[1], negative); /***************PHENOMENE BIZARRE*****************/ printf("adresse somme[0] = %d, adresse somme[1] = %d, adresse negative = %d t\n",&somme[0], &somme[1], &negative); /************************************************/ if (somme[0] < 0) { somme[0] = -1 * somme[0]; negative = 1; } printf("somme[0] = %d, somme[1] = %d, negative = %d \n",somme[0], somme[1], negative); reduction(somme); tab_chiffre[2] = -tab_chiffre[2]; if (negative == 1) { printf("la soustraction %d/%d - %d/%d = -%d/%d\n \n",tab_chiffre[0],tab_chiffre[1],tab_chiffre[2],tab_chiffre[3],somme[0],somme[1]); } else { printf("la soustraction %d/%d - %d/%d = %d/%d\n \n",tab_chiffre[0],tab_chiffre[1],tab_chiffre[2],tab_chiffre[3],somme[0],somme[1]); } }
Merci par avance! Si vous avez une réponse à mon problème!
Evilfalcon
A voir également:
- "Pointeur et printf", phénomène que je ne m'explique pas!!!
- Pointeur souris - Guide
- Curseur Windows 10 : comment bien voir la souris à l'écran - Guide
- Le pointeur de mon pc portable ne marche plus - Guide
- Pointeur souris disparu pc portable asus - Forum Windows 8 / 8.1
- Pointeur souris disparu pc portable ✓ - Forum Windows 10
5 réponses
Bonjour
C'est bien de donner les détails mais on n'a pas le code sources que tu voulais poster, pourrais ton l'avoir afin de comprendre ce qu'il on est ?
;) à bientôt
C'est bien de donner les détails mais on n'a pas le code sources que tu voulais poster, pourrais ton l'avoir afin de comprendre ce qu'il on est ?
;) à bientôt
Oui! Pas de problème! Tu m'as juste pris de cour! comme j'ai missclic sur valider, avant de finir mon topic! Tu ne pouvez pas avoir toutes les informations!
je sais pas trop quel est ton but c'est de voir les adresses ou effectuer des opérations simples ? vu le code :)
Mon but: faire un opération simple de soustraction! Par contre je travail avec des fractions!
J'ai affiché les adresses lors de ma recherche de debuggage! Je travail seul, et si vraiment je ne trouve pas ou je ne comprend pas! Je demande de l'aide!
La j'ai trouvé d'ou viens l'erreur, mais je ne comprend pas ce phénomène!!!!
Je comprend pas pourquoi, j'ai &negative = &somme[1]! (dans ce cas la, je parle de l'adresse de la variable négative et de l'adresse de la second case du tableau).
Pour preuve, sur cette partie du code (juste en dessous du commentaire phénomène bizarre:
Sur le premier printf, j'ai somme[1] = 4 et negative = 4 (par exemple),
sur le deuxiéme, j'ai somme[1] = 1 et negative = 1.
Pour debbugger, je rajout dela:
Ca marche très bien!!!!!
Je vous le donne le code des trois programmes que j'ai créé:, c'est à dire:
"saisie"
"cal_add"
"reduction"
Le programme "saisie", me sert à rentrer les deux fraction, dans le tableau tab_chiffre
voici, le code:
le programme cal_add faire la somme et de me rendre la somme ou la différence:
voici le code:
et enfin le programme reduction qui me donne la fraction irreductible.
le code est:
J'ai affiché les adresses lors de ma recherche de debuggage! Je travail seul, et si vraiment je ne trouve pas ou je ne comprend pas! Je demande de l'aide!
La j'ai trouvé d'ou viens l'erreur, mais je ne comprend pas ce phénomène!!!!
Je comprend pas pourquoi, j'ai &negative = &somme[1]! (dans ce cas la, je parle de l'adresse de la variable négative et de l'adresse de la second case du tableau).
Pour preuve, sur cette partie du code (juste en dessous du commentaire phénomène bizarre:
printf("somme[0] = %d, somme[1] = %d, negative = %d \n",somme[0], somme[1], negative); if (somme[0] < 0) { somme[0] = -1 * somme[0]; negative = 1; } printf("somme[0] = %d, somme[1] = %d, negative = %d \n",somme[0], somme[1], negative);
Sur le premier printf, j'ai somme[1] = 4 et negative = 4 (par exemple),
sur le deuxiéme, j'ai somme[1] = 1 et negative = 1.
Pour debbugger, je rajout dela:
void soustraction (int choix_menu, int tab_chiffre[3]) { int somme[1]; int negative = 0; int* Pointeur_somme = &somme; int* Pointeur_negative = &negative;
Ca marche très bien!!!!!
Je vous le donne le code des trois programmes que j'ai créé:, c'est à dire:
"saisie"
"cal_add"
"reduction"
Le programme "saisie", me sert à rentrer les deux fraction, dans le tableau tab_chiffre
voici, le code:
#include <stdio.h> #include <stdlib.h> void saisie(int tab_chiffre[3]) { char confirmer='N'; do { printf("numerateur du chiffre 1?\n"); scanf("%d",&tab_chiffre[0]); printf("denumerateur du chiffre 1?\n"); scanf("%d",&tab_chiffre[1]); printf("numerateur du chiffre 2?\n"); scanf("%d",&tab_chiffre[2]); printf("denumerateur du chiffre 2?\n"); scanf("%d",&tab_chiffre[3]); getchar(); printf("Vos chiffres sont %d/%d et %d/%d \nconfirmer cette selection? (Y/N) \n",tab_chiffre[0],tab_chiffre[1],tab_chiffre[2],tab_chiffre[3]); scanf("%c",&confirmer); printf("\n"); }while((confirmer !='y') && (confirmer !='Y')); }
le programme cal_add faire la somme et de me rendre la somme ou la différence:
voici le code:
#include <stdio.h> #include <stdlib.h> void cal_add(int tab_chiffre[3], int somme[1]) { somme[0]=(tab_chiffre[0]*tab_chiffre[3])+(tab_chiffre[1]*tab_chiffre[2]); somme[1]=tab_chiffre[1]*tab_chiffre[3]; }
et enfin le programme reduction qui me donne la fraction irreductible.
le code est:
#include <stdio.h> #include <stdlib.h> void reduction(int somme[1]) { int nb1= somme[0]; int nb2= somme[1]; int nb3= 0; if (somme[0] == somme[1]) { somme[0] = 1; somme[1] = 1; } else { if (nb1 < nb2) { nb3 = nb2; nb2 = nb1; nb1 = nb3; } do { if (nb1 >= nb2) { nb3 = nb1 - nb2; //printf("%d - %d = %d\n",nb1,nb2,nb3); nb1 = nb3; } else { nb1 = nb2; nb2 = nb3; } //printf("nb1 = %d, nb2 = %d, nb3 = %d\n",nb1,nb2,nb3); }while(nb3 != 0); //printf("le pgcd est %d",nb2); somme[0]=somme[0]/nb2; somme[1]=somme[1]/nb2; } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
J'ai lu le début de ton code et me suis arrêté à la 1ère erreur.
int somme[1];
int tab_chiffre[3];
Cela veut dire que tu crées un tableau somme de 1 case et un tableau de tab_chiffre de 3 cases.
Donc, somme[0] existe mais pas somme[1].
De même, tab_chiffre[0], tab_chiffre[1] et tab_chiffre[2] existent mais pas tab_chiffre[3]. Si tu les utilises, tu lis ou écris à l'adresse d'une variable située à côté dans la pile...
Cdlt,
J'ai lu le début de ton code et me suis arrêté à la 1ère erreur.
int somme[1];
int tab_chiffre[3];
Cela veut dire que tu crées un tableau somme de 1 case et un tableau de tab_chiffre de 3 cases.
Donc, somme[0] existe mais pas somme[1].
De même, tab_chiffre[0], tab_chiffre[1] et tab_chiffre[2] existent mais pas tab_chiffre[3]. Si tu les utilises, tu lis ou écris à l'adresse d'une variable située à côté dans la pile...
Cdlt,