Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1858 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Problème avec la condition if/else if

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Problème avec la condition if/else if

n°835499
vanilla
datoune's revival
Posté le 29-08-2004 à 14:49:09  profilanswer
 

Hello,
Je pige pas du tout pourquoi ce code n'ests pas bon :
 
En effet, gcc m'indique une erreur quand je compile (22:error: syntax error before ';' token sachant que le code ci-dessous commence à la ligne 21) et vim m'indique qu'il y a un problème avec les acollades. Or, j'ai vérifié sur 36 bouquins/cours comment était la structure d'un if et c'est pourtant comme ça  :heink:  
 

Code :
  1. if (x < 0) {
  2. mes instructions;
  3. }
  4. else if (x == 0)
  5. mes instructions ;
  6. }
  7. else if (x > 0)
  8.  mes instructions ;
  9. }


 
Il est dit dans le bouquin de K&R qu'il faut mettre les accolades s'ils y a plusieurs instructions : c'est bien mon cas...
 
ça doit être tout con mais je vois pas le pb [:le kneu]


---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
mood
Publicité
Posté le 29-08-2004 à 14:49:09  profilanswer
 

n°835507
jesus_chri​st
votre nouveau dieu
Posté le 29-08-2004 à 15:01:30  profilanswer
 

et les accolages ouvrantes ?

n°835509
jesus_chri​st
votre nouveau dieu
Posté le 29-08-2004 à 15:02:21  profilanswer
 

Code :
  1. if (x < 0) {
  2. mes instructions;
  3. }
  4. else if (x == 0) {
  5. mes instructions ;
  6. }
  7. else if (x > 0) {
  8.  mes instructions ;
  9. }


 
Et efface vite ce post ou tu vas te faire défoncer par Taz ! [:jofusion]


Message édité par jesus_christ le 29-08-2004 à 15:03:40
n°835510
vanilla
datoune's revival
Posté le 29-08-2004 à 15:07:44  profilanswer
 

Non c'est que j'ai mal recopié ...


---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
n°835517
vanilla
datoune's revival
Posté le 29-08-2004 à 15:18:39  profilanswer
 

Je pense qu'il faut mieux que je poste le code en entier...
C'est un code que j'avais déjà posté ici mais je voulais l'améliorer.
 

Code :
  1. #include <stdio.h>
  2. #include <math.h>
  3. // Calcul des equations du second degres
  4. int main() {
  5. float a, b, c, delta, alpha, beta, z1, z2; 
  6. char z = 0xFD; // caractere '²'
  7. a = b = c = 0;
  8. printf("Pour rappel, votre equation est de type ax%c + bx + c = 0.\n", z);
  9. printf("Saisissez respectivement les nombres a, b et c.\n" );
  10. scanf("%f %f %f",&a, &b, &c);
  11. printf("Vous avez choisi les nombres a=%f, b=%f et c=%f.\n", a, b, c);
  12. printf("Votre équation est donc : %fx%c + %fx + %f = 0.\n\n", a, z, b, c);
  13. delta = (b*b) - (4*a*c);
  14. printf("Le nombre delta est egal a %f.\n", delta);
  15. if (delta < 0) {
  16. z1 = (-b - 'i'*sqrt((-delta)) / (2*a);
  17. z2 = (-b + 'i'*sqrt((-delta)) / (2*a);
  18. puts("L'equation n'a pas de solution dans R.\nEn revanche, elle en a dans C dont voici les racines :\n" );
  19. printf("z1 = %f\n""z2 =%f\n", z1, z2);
  20. }
  21. else if (delta == 0) {
  22. alpha = -b / 2*a;
  23. printf("L'equation a une solution dans R : %f.\n", alpha);
  24. }
  25. else if (delta > 0) {
  26. alpha = (-b - sqrt(delta)) / (2*a);
  27. beta = (-b + sqrt(delta)) / (2*a);
  28. printf("L'equation a deux solutions dans R : %f et %f.\n", alpha, beta);
  29. }
  30. return 0;
  31. }


 
vim me fout les accollades en rouge, je pige pas pq. L'erreur de gcc est tjs la même.


---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
n°835520
black_lord
Truth speaks from peacefulness
Posté le 29-08-2004 à 15:23:11  profilanswer
 

il te manque des parenthèses dans tes calculs :o


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°835521
Kermit
Posté le 29-08-2004 à 15:23:16  profilanswer
 

z1 = (-b - 'i'*sqrt((-delta)) / (2*a);
z2 = (-b + 'i'*sqrt((-delta)) / (2*a);  
 
Ta un probleme dans les parenthèses, tu en ouvres plus que tu en fermes.

n°835523
leneuf22
Posté le 29-08-2004 à 15:27:08  profilanswer
 

Code :
  1. z1 = (-b - 'i'*sqrt((-delta)) / (2*a);
  2.        z2 = (-b + 'i'*sqrt((-delta)) / (2*a);


vérifie tes parenthèses
 
ya d'autres choses à dire sur ton code...
en attendant gcc peut t'afficher des warnings utiles, suffit de lui demander
-Wall -W -pedantic
 
edit : 3 minutes 52 secondes dans la vue :pt1cable:


Message édité par leneuf22 le 29-08-2004 à 15:28:02
n°835525
Taz
bisounours-codeur
Posté le 29-08-2004 à 15:31:28  profilanswer
 

j'aime bien ton
 
char z = 0xFD; // caractere '²'  
 

n°835529
vanilla
datoune's revival
Posté le 29-08-2004 à 15:37:38  profilanswer
 

Ah voila tout s'explique, merci à vous :jap:
 
leneuf22 : quelle genre de chose ? ça m'intéresse
 
Taz : oui je sais c'est pas beau mais comment faire sinon ?


---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
mood
Publicité
Posté le 29-08-2004 à 15:37:38  profilanswer
 

n°835530
Taz
bisounours-codeur
Posté le 29-08-2004 à 15:39:00  profilanswer
 

z = 'X' :o

n°835531
jesus_chri​st
votre nouveau dieu
Posté le 29-08-2004 à 15:39:21  profilanswer
 

vanilla a écrit :

Ah voila tout s'explique, merci à vous :jap:
 
leneuf22 : quelle genre de chose ? ça m'intéresse
 
Taz : oui je sais c'est pas beau mais comment faire sinon ?


 
Ben :
char z = 'A'  
si tu veux le caractère A, plutôt que son code ascii
et puis '²' ça fait 2 caractères

n°835532
jesus_chri​st
votre nouveau dieu
Posté le 29-08-2004 à 15:39:47  profilanswer
 

grillaid 21 secondes

n°835537
Taz
bisounours-codeur
Posté le 29-08-2004 à 15:41:51  profilanswer
 

non c'est qu'un seul caractère

n°835539
vanilla
datoune's revival
Posté le 29-08-2004 à 15:43:42  profilanswer
 

Toutes façon mon code est trop pourri :o
 
J'ai plein de undefined reference to `sqrt' :D


---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
n°835542
leneuf22
Posté le 29-08-2004 à 15:47:23  profilanswer
 

si t'es sous linux :
-lm

n°835543
vanilla
datoune's revival
Posté le 29-08-2004 à 15:48:51  profilanswer
 

Je venais juste d'y penser :jap:


---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
n°835553
Taz
bisounours-codeur
Posté le 29-08-2004 à 16:00:47  profilanswer
 

vanilla a écrit :

Toutes façon mon code est trop pourri :o
 
J'ai plein de undefined reference to `sqrt' :D

ploum sort de ce corps

n°835563
bjone
Insert booze to continue
Posté le 29-08-2004 à 16:23:33  profilanswer
 

Citation :


       z1 = (-b - 'i'*sqrt((-delta)) / (2*a);
       z2 = (-b + 'i'*sqrt((-delta)) / (2*a);  


 
comment dire, heuuuuu.......
 
en C/C++ tu n'a pas les calculs complexes supportés naturellement.

n°835564
bjone
Insert booze to continue
Posté le 29-08-2004 à 16:24:02  profilanswer
 

mais c'était une belle tentative...

n°835565
vanilla
datoune's revival
Posté le 29-08-2004 à 16:24:14  profilanswer
 

Vi je sais cette partie marche pas :D


---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
n°835566
Taz
bisounours-codeur
Posté le 29-08-2004 à 16:25:15  profilanswer
 

bjone a écrit :

Citation :


       z1 = (-b - 'i'*sqrt((-delta)) / (2*a);
       z2 = (-b + 'i'*sqrt((-delta)) / (2*a);  


 
comment dire, heuuuuu.......
 
en C/C++ tu n'a pas les calculs complexes supportés naturellement.

y a des propositions pour

n°835819
Sve@r
Posté le 29-08-2004 à 21:52:25  profilanswer
 

vanilla a écrit :

Vi je sais cette partie marche pas :D


 
C'est normal, dans cette partie 'i' est traité comme le nombre correspondant au code "ascii" du caractère "i" alors que tu cherches à afficher la notation des nombres complexes "z=x+iy"
 
Essaye plutôt ceci...
 

Code :
  1. if (delta < 0) {
  2.        z1 = -b /(2*a);
  3.        z2 = sqrt(-delta) / (2*a);
  4.         puts("L'equation n'a pas de solution dans R.\nEn revanche, elle en a dans C dont voici les racines :\n" );
  5.        printf("z1 = %f + %fi\n, z2 =%f - %fi\n", z1, z2, z1, z2);
  6.      }


 
Etant donné que delta est négatif, sa racine carrée entre dans le domaine imaginaire et tu ne peux plus l'additionner à "b". Tu es donc obligé de dissocier l'affichage des réels et des imaginaires.


Message édité par Sve@r le 29-08-2004 à 21:58:34

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°835875
vanilla
datoune's revival
Posté le 29-08-2004 à 22:48:23  profilanswer
 

Sympa, merci :jap:
 
J'avais écrit ça vite fait en fait sans chercher plus loin en fait mais j'apprécie ton bout de code que je vais remplacer :)


Message édité par vanilla le 29-08-2004 à 22:52:56

---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
n°836188
Sve@r
Posté le 30-08-2004 à 10:32:23  profilanswer
 

Pas de pb.
 

vanilla a écrit :

vim me fout les accollades en rouge, je pige pas pq. L'erreur de gcc est tjs la même.


 
2 petits trucs de "vi"...
- place ton curseur sur un crochet, parenthèse ou accolade et appuie sur le caractère "%", ton curseur se déplacera automatiquement sur le crochet, parenthèse ou accolade opposé. Et de nouveau "%" pour rebasculer sur le premier, etc.
- met en place le "showmatch" (:set showmatch) et chaque fois que tu fermeras une parenthèse, accolade ou crochet, le curseur se placera pendant 1/2 sec. sur son correspondant ouvrant (à condition que celui-ci se trouve encore en visuel dans ta page)


Message édité par Sve@r le 30-08-2004 à 10:35:10

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°836343
vanilla
datoune's revival
Posté le 30-08-2004 à 11:56:02  profilanswer
 

C'est sympa le '%' (par contre faut appuyer sur shift avant) et ce showmatch :love:
 
Adopté :jap:
 
Il y a aussi les folds qui permettent de fermer/ouvrir les blocs de code, très pratique.


---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Problème avec la condition if/else if

 

Sujets relatifs
petit problème[VBA] --> Problème rapide ( erreur de syntaxe )
[tomcat 5][datasource][mysql] Problème avec l'exemple de base...Probleme mais pk???
[SQL] selection des donnees qui ne remplissent pas une conditionProblème image Jpg avec Imagecreatefromstring()
probleme d insertion d un lien dans un mail[DLL] probleme export d'une classe en DLL
probleme avec un formulaire et liste deroulante 
Plus de sujets relatifs à : [C] Problème avec la condition if/else if


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)