CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Problème débutant C

Dam979
Dam979
Niveau 7
25 septembre 2012 à 18:27:47

Bonjours à tous,

je me suis lancé dans des études d'informatique il y a une semaine.
J'ai les rudiments du codage en C ce matin et j'essaye en ce moment de coder un petit programme (sur l'indice de masse corporelle).
Cependant, je n'arrive ps a compiler car j'ai une "syntax error" quand j'essaye de mettre "plus petit que" (que je note "<")

Exemple de quelques lignes:
if(calculimc(poids, taille) < 16.5);
{
printf("dénutrition ou famine");
}

Merci de votre future aide

PS: ne me lyncher pas si c'est mal codé, par contre dites moi comment faire ça mieux. J'ai beaucoup à apprendre.

Tikim
Tikim
Niveau 21
25 septembre 2012 à 18:51:32

Tu as mis un point-virgule après la condition du "if".

Un if s'écrit comme ça :

if(condition)
{
instruction;
}

Tikim
Tikim
Niveau 21
25 septembre 2012 à 18:52:45

Note au passage que le nom de l'erreur était très parlant : Syntax error :d) Erreur de syntaxe. La plupart du temps le message d'erreur t'indique avec précision ce qui pose problème :ok:

Dam979
Dam979
Niveau 7
25 septembre 2012 à 19:11:42

J'ai réussi à compiler le programme, mais j'ai 2 autres problèmes.
1) Il me dit "the variable taille is being used without being initialized". Pourtant, je regarde mon code, et j'ai fait la même chose qu'avec ma variable "poids" et là, il ne me fait pas de remarque.

2) Je peux mettre n'importe quel poids et taille (car j'arrive a lancer le programme ne mettant "ignorer" au problème précédant), il me met toujours dénutrition ou famine.

Mon code :

  1. include<stdlib.h>
  2. include<stdio.h>
  3. include<math.h>

float calculimc(float masse,float taille);

float main()
{
float poids;
float taille;
float imc = calculimc(poids, taille);

printf("Quel est votre poids ? (en kilos) :\n");
scanf_s("%f%*c", &poids);

printf("Quel est votre taille ? (en metres) :\n");
scanf_s("%f%*c", &taille);

if (imc < 16.5)
{
printf("denutrition ou famine :\n");
}
else if (imc >=16.5 && imc <18.5)
{
printf("maigreur :\n");
}
else if(imc >=18.5 && imc <25)
{
printf("corpulence normale :\n");
}
else if(imc >=25 && imc <30)
{
printf("surpoids :\n");
}
else if(imc >=30 && imc <35)
{
printf("obésite moderee :\n");
}
else if(imc >=35 && imc <40)
{
printf("obesite severe :\n");
}
else
{
printf("obésite morbide ou massive :\n");
}

getc(stdin);

return 0;
}

float calculimc(float m, float t)
{
return m/(t*t);
}

Tikim
Tikim
Niveau 21
25 septembre 2012 à 19:28:23

Déjà au début tu fais ça :
float poids;
float taille;
float imc = calculimc(poids, taille);

:d) A ton avis, quelles valeurs sont envoyées à calculimc ? Tes deux variables prennent certaines "cases" de mémoire, et ces cases ont un certain contenu. Le problème c'est que si tu initialises pas tes variables, tu gardes l'ancien contenu, qui est probablement pas du tout fait pour ton programme ou ta fonction. Donc avant d'utiliser tes variables il faut être SUR qu'elles ont une valeur correcte pour ton programme.

La solution correcte ici serait de dire par exemple :

float poids = 0;
float taille = 0;
float imc = calculimc(poids, taille);

(Note que c'est comme ça qu'on initialise une variable en général. Dans ton cas tu auras d'autres soucis, l'IMC étant une division, tu auras une erreur à cause d'une division par 0 :o)) Je te laisse changer les valeurs, l'essentiel c'est qu'il y ait une valeur avant d'effectuer le calcul, ça parait logique.

Deuxième problème, et c'est un GROS GROS GROS problème. Lis très bien stp, c'est ultra important.

Dans ce genre de langage de programmation, imagine toi un curseur qui parcourt ton code. Il lit la première ligne, puis la deuxième, puis la troisième, tombe sur une fonction, effectue la fonction de haut en bas, passe à la quatrième ligne, etc.

Ici tu veux effectuer le calcul de l'IMC avant d'avoir demandé à l'utilisateur ses données. Voici une solution correcte :

float taille = 0;
float poids = 0;
float imc = 0;

printf("Quel est votre poids ? (en kilos) :\n");
scanf_s("%f%*c", &poids);

printf("Quel est votre taille ? (en metres) :\n");
scanf_s("%f%*c", &taille);

imc = calculimc(poids, taille);

if (imc < 16.5)
{
printf("denutrition ou famine :\n");
}
else if (imc >=16.5 && imc <18.5)
{
printf("maigreur :\n");
}
else if(imc >=18.5 && imc <25)
{
printf("corpulence normale :\n");
}
else if(imc >=25 && imc <30)
{
printf("surpoids :\n");
}
else if(imc >=30 && imc <35)
{
printf("obésite moderee :\n");
}
else if(imc >=35 && imc <40)
{
printf("obesite severe :\n");
}
else
{
printf("obésite morbide ou massive :\n");
}
PS : Pourquoi "float main" ? Sais-tu ce que tu fais ? :ouch:

Tikim
Tikim
Niveau 21
25 septembre 2012 à 19:33:09

Pour récapituler, je te conseille FORTEMENT de relire ton cours, que ce soit un cours scolaire ou en ligne (site du zéro ? ).

Initialiser les variables, savoir dans quel ordre est exécuté ton code, connaître la syntaxe, c'est la base de la base.

Autre chose par rapport à mon PS, si tu ne sais pas ce que tu fais, ne le fais pas. Par exemple, si tu ne sais pas à quoi sert le type de la fonction main, ne le change pas. C'est "int main" et pas "float main", et quand bien même ça compilerait, ça n'a juste aucun sens.

Dam979
Dam979
Niveau 7
25 septembre 2012 à 19:40:04

J'ai bien compris mes conneries.
Cependant, j'ai eu cours aujourd'hui et je dois avouer qu'on ne nous a pas vraiment expliquer certains point comme par exemple ce qu'il faut mettre devant le main. Je sais juste que "in" est un entier, "float" est un nombre a virgule et que "main" initialise le programme.

Je vais essayer de coder d'autres programmes pour approfondir un peu mes connaissances.

Tikim
Tikim
Niveau 21
25 septembre 2012 à 19:43:19

C'est "int", parce que main est censé renvoyer une valeur, c'est cette valeur qui permet de savoir si tout s'est bien déroulé ou non, en gros. Une valeur qui ne sert pas au programmeur lambda, et dont tu n'as pas à t'occuper, du moins pour l'instant.

N'hésite pas à faire un tour sur différents sites/tutoriaux sur ce langage, et c'est bien de programmer de petits utilitaires comme ça, ça t'aidera à retenir :)

Dam979
Dam979
Niveau 7
25 septembre 2012 à 20:07:19

en tout cas, merci de votre aide.

J'ai trouver un petit "défis" pour demain ^^

Bonne soirée a tout le monde.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment