begin process at 2012 05 28 19:11:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Général

 > 

comportement étrange ...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

comportement étrange ...

mercredi 11 octobre 2006 à 19:22:02 | comportement étrange ...

clempar55

J'ai fait un petit programme tout à l'heure pour voir si on pouvait incrementer un double et j'ai fait le test suivant:

    double d=32.5;
    printf(" d=%f  \n d++=%f  \n d=%f  \n", d , d++ , d );

Cela peut ne pas paraitre très clair, mais le fonctionnement est sensé être simple: on affiche la valeur de d, puis la valeur de d++ , et enfin la valeur de d incrémentée. La console devrait donc afficher:

    d=32.500000000
    d++=32.50000000
    d=33.500000000

Mais elle affiche en fait :

    d=33.500000
    d++=33.500000
    d=32.500000
Je me demandais ce qui peut bien etre responsable de ce comportement. Es-ce le compilo( j'utilise GCC )? Ou bien une mauvaise utilisation de l'operateur ++ , ou enfin la fonction printf ?
Merci
mercredi 11 octobre 2006 à 19:41:31 | Re : comportement étrange ...

blinix123

Ben...non...si ?
La ligne d++ doit affiché 33.500000, c'est ce qu'elle fait...! ton code marche, ou alors j'ai pas suivi lol
mercredi 11 octobre 2006 à 19:43:18 | Re : comportement étrange ...

blinix123

oups désolé j'ai rien dis j'ai mal lu, OUBLIS
mercredi 11 octobre 2006 à 20:32:11 | Re : comportement étrange ...

buno

Administrateur CodeS-SourceS
Sauf erreur de ma part, l'opérateur "++" est défini seulement pour les int. Pour tous les autres types, comportement non garantis...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
mercredi 11 octobre 2006 à 20:35:12 | Re : comportement étrange ...

rrk275

Réponse acceptée !
C'est un probleme du a l'appel du ++ dans une pile d'argument , en effet rien ne te dit que les arguments sont appelés l'un a la suite de l'autre pour t'en convaicre

#include <stdio.h>
#include <stdlib.h>
int aff(int nb)
{
printf("appel de aff(%d)\n",nb);
return nb;
}
int main()
{
    printf("%d %d %d\n",aff(0),aff(1),aff(2));
    system("pause");
    return 0;
}

Louis
mercredi 11 octobre 2006 à 20:36:47 | Re : comportement étrange ...

rrk275

Réponse acceptée !
oups dsl pour le double post j'oubliais, le ++ est utilisable avec les doubles ^^
#include <stdio.h>
#include <stdlib.h>

int main()
{
    double n = 2;
    printf("%llf\n",n);
    n++;
    printf("%llf\n",n);
    system("pause");
    return 0;
}
mercredi 11 octobre 2006 à 21:21:25 | Re : comportement étrange ...

clempar55

Donc il fallait juste éviter d'utiliser ++ de cette manière.
Merci rrk275 pour ta réponse.
mercredi 11 octobre 2006 à 23:00:50 | Re : comportement étrange ...

rrk275

Pour un peu plus d'infos je vais expliquer rapidement des principes du fonctionnements d'appel d'une fonction .. ( vite fait .. je suis pas expert ^^)
en gros , il met les arguments dans une pile , les fonctions etant calculé a l'empilement , seulement une fois dans ta fonction il depile le premier en 1er, donc le dernier en dernier, et le dernier est celui le plus en dessous donc celui qui a été empilé le premier .. cela explique cet ordre d'appel et il faut donc faire attention quand on appelle plusieurs fonctions dans des arguments ^^

mercredi 11 octobre 2006 à 23:08:03 | Re : comportement étrange ...

nightlord666

Membre Club
Les fonctions sont pour la plupart en __stdcall ou en __cdecl (et pas en pascal), ce qui signifie qu'il pushe les paramètres de droite à gauche dans la pile.


Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.
jeudi 12 octobre 2006 à 00:45:13 | Re : comportement étrange ...

BruNews

Administrateur CodeS-SourceS
printf, sprintf et autres variantes sont en __cdecl pour cause de nbr de params indéfinis, il n'y a donc que l'appelant qui puisse dépiler car il est le seul à en connaitre le nombre.

ciao...
BruNews, MVP VC++

1 2

Cette discussion est classée dans : valeur, printf, double, comportement, étrange


Répondre à ce message

Sujets en rapport avec ce message

Pb peut etre de compilateur ?! Need Help please [ par Orezza ] Orezzasalut à tous, je ne comprends vraiment pas le Pb, le compilateur Visual C++ indique 0 erreur-0 warning, or kand j'execute mon prog des ke je ren Conversion étrange [ par Ziman ] Bonjour,je viens de tomber sur un cas bizarre lol. En fait, je fais ceci un moment :chaine[x] = 130;printf ("%d\n", chaine[x]);pour attribuer à l'octe Problème de fonction [ par edwix ] Bonjour tout le monde sa fait depuis 2 heures que je travaille sur un projet et je ne comprend pas comment faire pour affecter mes valeur par rapport problem dans un code sudoko en c [ par sassi1985 ] svp jai un mini projet c sur le code de jeux sodoku je fait le code mais j ai problème de la fichage il affiche des grand entier aléatoire voila mon Lagrange Polynomial [ par bayans ] Je souhaite ajouter ces formules dans le code ci-dessus, afin d'executer le cacul de Lagrange Polynomial Interpolation dans le langage c Au fait si le Programme dynamic [ par bayans ] Ceci est le programme que j'ai trouver sur le net . Le programeur a laisser un message disant que ce programme etait un progrmme dynamique bon etant q Appel d'un fichier d'entete [ par batoule80 ] Bonjour, je programme en c sous linux , il s'agit de résoudre une équation du second degrés. en premier lieu on insite l'utilisateur à saisir les coé recherche comment faire fonctionner ce code via une interface graphique (pilotage port //) [ par cedpic ] voici le code que j ai creer qui marche tres bien en mode console mais je souhaiterais les piloter par une interface graphique en remplacent les bouto Problême avec Getchar... [ par Kolibot ] Je débute en C et je suis tombé sur un problême... : #include #include int main (){int a,b,d;a = 0; b = 0;printf ("Calculatrice : \n\n");printf ("Vale Comment afficher une valeur double en GUI ? [ par Gendal67 ] Bonsoir,Je suis entrain de programmer une application qui buggue, apparamment à cause d'une mauvaise affectation de valeurs à des variables de type do


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 8,315 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales