Unexpected identifier-id before 'if'

Fermé
Marie - Modifié le 5 mai 2021 à 16:08
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 5 mai 2021 à 16:08
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

Jean20B Messages postés 1797 Date d'inscription dimanche 6 avril 2014 Statut Membre Dernière intervention 17 décembre 2024 2 316
5 mai 2021 à 15:06
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");
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
Modifié le 5 mai 2021 à 16:17
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
0