Unexpected identifier-id before 'if'

Signaler
-
Messages postés
29800
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
6 mai 2021
-
Bonjour, voici mon programme mais je ne comprend pas pourquoi est ce que le compilateur le rejeté

#include <stdio.h>

int main()
{
    float x, y;
    printf("Entrez la valeur de x:\t");
    scanf("%f", &x);

    if (x >= 0 || x < 0.5) {
        y = 20 * x ;
        printf("la solution est : %f", y);
    }
    
    if (x >= 0.5 || x < 2/3) {
        y = ((30 * x * x) + (50 * x) - (15 / 2));
        printf("\n la solution est : %f", y);
    }

    if (x >= 2/3 || x > 1) {
        y = ((30 * x * x) - (60 * x) - (35 / 6));
        printf("\n la valeur de x doit être dans l'intervalle [0,1[" \n);
    }

    return 0;
}


Configuration: Android / Chrome 79.0.3945.116

2 réponses

Messages postés
1358
Date d'inscription
dimanche 6 avril 2014
Statut
Membre
Dernière intervention
11 mai 2021
1 662
Bonjour, à la ligne 23, il y a un \n à l'extérieur des guillemets. Essayez ceci :
printf ("\n la valeur de x doit être dans l'intervalle [0,1[ \n");
Messages postés
29800
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
6 mai 2021
7 088
Bonjour,

Quelques recommandations

1) Tu devrais indenter ton code, pour qu'il soit plus facile à lire (j'ai corrigé ton premier message en conséquence).

2) Tu devrais utiliser un éditeur texte adapté pour développer, qui t'aidera à voir directement les erreurs de syntaxe.

Tant que tu ne fais que des petits programmes tu peux envisager
  • notepad++ sous windows
  • kate
    ou
    gedit
    sous linux


Quand tu feras des programmes plus compliqués (impliquant de nombreux fichiers), il pourra être intéressant d'envisager des logiciels plus évolués (code::blocks, devcpp sous windows ;
anjuta
ou
kdevelop
sous linux)

3) Tes retours à la ligne sont bizarrement placés. Généralement on les met en fin de chaîne plutôt qu'en début de chaîne. Il n'y a aucune raison de mettre un espace devant
'\n'
ou
'\t'
.

4) Généralement on écrit les messages d'erreur dans la sortie d'erreur (
stderr
). Les résultats du programmes s'écrivent généralement dans la sortie standard (
stdout
). C'est exactement ce que fait
printf
(qui est équivalent à
fprintf(stdout, ...)
). Pour la culture,
scanf(...)
est une réécriture de
fscanf(stdin, ...)
(lecture dans l'entrée standard).

5) Si j'ai bien compris ce que tu veux faire, la structure de ton programme devrait être organisée autour de blocs
if ... else if ... else if ... else
puisque tu veux adapter le comportement de ton programme en fonctions de partitions de l'ensemble des nombres réels. Car ici la condition de ton dernier
if
semble fausse (
x > 1
au lieu de
x < 1
). De plus tu calcules y dans ce dernier cas alors que le résultat de ce calcul n'est pas utilisé.

Ainsi, ton programme peut se réécrire comme suit :

#include <stdio.h>

int main()
{
    float x, y;
    printf("Entrez la valeur de x:\t");
    scanf("%f", &x);

    if (x < 0 || x >= 1) {
        fprintf(stderr, "la valeur de x doit être dans l'intervalle [0,1[\n");
        return -1;
    } else if (x < 0.5) {
        // x in [0, 0.5[
        y = 20 * x ;
    } else if (x < 2 / 3) {
        // x in [0.5, 2 / 3[
        y = (30 * x * x) + (50 * x) - (15 / 2);
    } else {
        // x in [2 / 3, 1[
        y = (30 * x * x) - (60 * x) - (35 / 6);
    }
    printf("la solution est : %f\n", y); 
    return 0;
}


Bonne chance