Désolé pour le 1er message mais je suis nouveau sur le site et visiblement Opéra n'aime pas les retours à la ligne...
en espérant que FireFox fonctionne...
Bonjour à tous, débutant en C,
j'ai écris un code permettant d'éxecuter la suite de Fibonacci en additionnant les deux nombres précédant, stockés dans deux variables.
Tout à l'air correct juqu'à environ la 70~80e ligne ou le programme m'affiche:
5527939700884757
8944394323791464
14472334024676220
OR 5527939700884757+8944394323791464 n'est pas égale à
14472334024676220 mais à
14472334024676221, ce qui fausse tout le reste de la suite. Je ne comprend pas pourquoi il y a cette erreur et encore moins pourquoi elle se manifeste si loin dans la boucle...
Si quelqu'un peu m'aider à trouver d'où vient l'erreur, voici mon code:
#include <stdio.h>

#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#include <dos.h>
#include <sys\timeb.h>
#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stddef.h>
#include <winsock.h>
#include <string.h>
#define STDOUT GetStdHandle(STD_OUTPUT_HANDLE)
// Renvoie la ligne sur la quelle se trouve le curseur
int WhereY( void )
{
CONSOLE_SCREEN_BUFFER_INFO coninfo;
GetConsoleScreenBufferInfo (STDOUT, &coninfo);
return coninfo.dwCursorPosition.Y;
}
// Renvoie la colonne sur laquelle se trouve le curseur
int WhereX( void )
{
CONSOLE_SCREEN_BUFFER_INFO coninfo;
GetConsoleScreenBufferInfo (STDOUT, &coninfo);
return coninfo.dwCursorPosition.X;
}
// Positionne le curseur sur la colonne x
void GotoX(int x)
{
int y = WhereY();
COORD dwCursorPosition = { x, y };
SetConsoleCursorPosition (STDOUT, dwCursorPosition);
}
void Color(int couleurDuTexte, int couleurDeFond) // fonction d'affichage de couleurs
{
HANDLE H = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(H, couleurDeFond*16+couleurDuTexte);
}
int main(int argc, char *argv[])
{
system("mode con: cols=155 lines=200");
SetConsoleTitle("Suite de Fibonacci");
double p = 0;
double a = 1;
double ap = 0;
long X = 0;
double i = 0;
printf("Appuyer sur une touche pour arreter le boucle\n");
sleep(1200);
printf("[Pause] pour la mettre en pause et [Entrer] pour reprendre\n");
while ( !kbhit() )
{
GotoX(WhereX() - 7);
Color(8,0);
printf("\n - ");
Color(15,0);
printf("%lf", a + p);
GotoX(WhereX() - 6);
printf(" ");
ap = a;
a = p;
p = a + ap;
sleep(25);
}
Cordialement,
Bastien