Bonjour je dois écrire un programme de résolution d'une équation du second degré. Les coefficients (réels) sont saisis au clavier. Les erreurs éventuelles doivent être traitées. Est-ce que je peux améliorer mon programme ? Par ailleurs, comment est-ce que je peux vider le buffer sans avoir à taper une deuxième fois sur entrée ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
 
#include <stdio.h>
#include <math.h>
#include <ctype.h>
 
void saisie(double* coeff,char c)
{
    int ok;
    char buffer[1024];
 
    printf("Entrez le coefficient %c : ",c);
    ok=scanf("%lf",coeff);
 
    if(getchar()!='\n' || ok==0)
    {
        printf("La saisie n'est pas valide.");
        exit (-1);
    }
    //fgets(buffer,1023,stdin);
    //while(getchar()!='\n');
}
 
void racines_polynome (double a,double b,double c,int* nbracines,double* x1,double* x2)
{
    double delta;
    delta=b*b-4*a*c;
 
    if(a==0)
        if (b==0)
            if(c==1)
                *nbracines=-2;
            else
                *nbracines=-1;
        else
        {
            *nbracines=1;
            *x1=-c/b;
        }
 
    else
    {
        if(delta<0)
            *nbracines=0;
        else
        {
            *nbracines=2;
            *x1=(-b+sqrt(delta))/(2*a);
            *x2=(-b-sqrt(delta))/(2*a);
        }
    }
}
 
int main()
{
    double a,b,c,x1,x2;
    int nbracines,ok;
    char rep;
 
    do
    {
        printf("Entrez les coefficients a,b et c du polynome ax2+bx+c : \n");
 
        saisie(&a,'a');
        saisie(&b,'b');
        saisie(&c,'c');
 
        racines_polynome(a,b,c,&nbracines,&x1,&x2);
 
        switch (nbracines)
        {
            case -2 : printf("Le polynome est constant et n'a pas de racines.\n");break;
 
            case -1 : printf("Le polynome est nul et a une infinite de racines.\n");break;
 
            case 0 : printf("Le polynome n'a pas de racines dans R.\n");break;
 
            case 1 : printf("Le polynome est du premier degre; racine=%lf.\n",x1);break;
 
            case 2 : {  if ( x1 == x2 )
                            printf( "Le polynome a une racine double; racine = %lf\n" , x1 );
                        else
                            printf( "Le polynome a 2 racines;x1 = %lg; x2 = %lf\n" , x1 , x2 );
                     }
        }
 
        printf("Voulez-vous recommencer ? o/n");
        scanf("%c",&rep);
        while(getchar()!='\n');
 
    } while (tolower(rep)!='n');
 
    return 0;
}