structure if - else (débutant) - C - Programmation
Marsh Posté le 31-01-2006 à 16:17:03
ReplyMarsh Posté le 31-01-2006 à 17:51:43
if ((tab_note[0][0] <= tab_note[1][1])&&(tab_note[1][1] <= tab_note[2][2]));
{printf("%s, %s,à la plus haute note\n", &tab_nom[2][2], &tab_prenom[2][2]);}
else;{if ((tab_note[0][0] <= tab_note[1][1])&&(tab_note[2][2] <= tab_note[1][1]));
{printf("%s, %s,à la plus haute note\n", &tab_nom[1][1], &tab_prenom[1][1]);}}
vala !
Marsh Posté le 31-01-2006 à 18:26:49
on oublie de toute façon je ne pense pas que cet algo soit efficace. je suis en train de le réecrire d'une autre manière :
{
int ID;
float Max = 0, Moy;
char tab_nom[3][25];
char tab_prenom[3][25];
float tab_note[3][25];
printf("Veuillez saisir le permier nom\n" );
scanf("%s", &tab_nom[0][0]);
printf("Veuillez saisir le premier prenom\n" );
scanf("%s", &tab_prenom[0][0]);
printf("Veuillez saisir la permiere note\n" );
scanf("%d", &tab_note[0][0]);
if (tab_note[0] >= Max);
{Max = tab_note[0],ID=0;}
et je rencontre le pb suivant (tjrs avec lcc) :
" operands of >= have illegal types 'pointer to float' and 'float' "
et la ligne d'après " operands of = have illegal types 'float' and 'pointer to float'"
Marsh Posté le 31-01-2006 à 18:48:52
Si float tab_note[3][25]; pourquoi oublier une dimension dans le if (tab_note[0][?]) ?
if (tab_note[0] >= Max); // Le point-virgule termine [le test], , il me semble
if () // sans ;
{
blabla;
blibli;
}
Marsh Posté le 31-01-2006 à 18:59:20
j'ai en partie suivi tes conseils, c'est bon il compile sans erreur maintenant
mais qd je teste mon prog, tout va bien jusqu'à la fin de la saisie de la troisèeme personne. ensuite il fini très vite, sans rien afficher des résultats.
je trouve pas mon erreur.
voici le code :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
int ID;
float Max = 0, Moy;
char tab_nom[3][25];
char tab_prenom[3][25];
float tab_note[3][25];
printf("Veuillez saisir le permier nom\n" );
scanf("%s", &tab_nom[0]);
printf("Veuillez saisir le premier prenom\n" );
scanf("%s", &tab_prenom[0]);
printf("Veuillez saisir la permiere note\n" );
scanf("%d", &tab_note[0]);
if (tab_note[0][24] >= Max);
{Max = tab_note[0][24],ID=0;}
printf("Veuillez saisir le second nom\n" );
scanf("%s", &tab_nom[1]);
printf("Veuillez saisir le second prenom\n" );
scanf("%s", &tab_prenom[1]);
printf("Veuillez saisir la seconde note\n" );
scanf("%d", &tab_note[1]);
if (tab_note[1][24] >= Max);
{Max = tab_note[1][24],ID = 1;}
printf("veuillez saisir le troisieme nom\n" );
scanf("%s", &tab_nom[2]);
printf("Veuillez saisir le troisieme prenom\n" );
scanf("%s", &tab_prenom[2]);
printf("Veuillez saisir la troisieme note\n" );
scanf("%d", &tab_note[2]);
if (tab_note[2][24] >= Max);
{Max = tab_note[2][24],ID = 2;}
printf("la meilleure note est",Max);
printf("et a ete obtenue par",tab_nom[ID]);
Moy = (tab_note[0][24]+tab_note[1][24]+tab_note[2][24])/3;[img][img][/img][/img]
printf("la moyenne est de", Moy);
}
Marsh Posté le 31-01-2006 à 19:29:15
je connais pas ton environnement de dev, mais tu peux avoir besoin de mettre un getch() final (biblio conio.h) pour bloquer l'exécution afin de voir les affichages à l'écran
Marsh Posté le 31-01-2006 à 19:30:34
La syntaxe c'est :
Code :
|
si tu met un ; tu admet qu'il n'y a qu'une instruction, ici : rien. Donc ton bloc en dessous est ignoré.
je sais pas si c'est le C qui veut ça, ou les profs qui apprenne le C qui code avec les pieds, mais presenter avec des indentation et avec aucune instruction après les crochets c'est mieux pour la lisibilité. Pourtant en C++/Java on m'a toujours appris comme ça.
edit : de plus, on ne met jamais deux instructions sur la meme ligne séparé de la virgule, c'est un peu trop peu previsible comme comportament, alors qu'un retour à la ligne et un ; ne coute pas grand chose.
Donc 3 façons de faire :
Code :
|
Code :
|
Code :
|
Meme si la derniere, voir meme la seconde sont peut recommandé... à la rigueur la seconde on l'ecrirait :
Code :
|
Marsh Posté le 31-01-2006 à 19:35:06
ton code corrigé et mieux présenté :
Code :
|
Marsh Posté le 31-01-2006 à 19:46:20
Etant donné qu'un nom est lié à un prénom et une note, il serait judicieux de les regrouper dans une structure
Code :
|
Puis, dans le main, définir un tableau de 3 élèves =>"t_eleve tabEleve[3]"
Ensuite, tu veux faire saisir le nom n° x => scanf("%s", tabEleve[x - 1].nom)
Ou bien la note n° x => scanf("%f", &tabEleve[x - 1].note)
Maintenant je vois pas trop pourquoi ce [25] pour les notes... mais ce doit être parce qu'il y a trop de commentaires.
Marsh Posté le 31-01-2006 à 19:50:11
Sve@r a écrit : Etant donné qu'un nom est lié à un prénom et une note, il serait judicieux de les regrouper dans une structure
|
Sans enoncé on est un peu dans le flou et c'est sur que son code à l'air un peu bizard. A mon avis dans son enoncé doit il y a voir la contrainte 25 notes maximum.
Apres son pb etait la syntaxe de IF
Marsh Posté le 31-01-2006 à 20:30:02
tyler1207 a écrit : if ((tab_note[0][0] <= tab_note[1][1])&&(tab_note[1][1] <= tab_note[2][2])) |
C'est quoi ces ';' ?
Marsh Posté le 31-01-2006 à 20:34:00
tyler1207 a écrit : j'ai en partie suivi tes conseils, c'est bon il compile sans erreur maintenant |
Ca me fait toujours rire !
|
Déjà, faire le ménage ...
Marsh Posté le 31-01-2006 à 20:38:03
merci merci d'avoir pris le tps ! g pas tt lu mais jsuis en train de le faire, là et jvais corriger ce qui cloche.
juste pour mon prof, jsais pas si il fait ça ac les pieds mais pour le moment je penche plutôt pour le fait que c'est moi qui apprend et qui m'y prend mal
edit : en ce qui concerne mon environnement pour faire ça j'utilise lcc, pas par choix, juste pcq c'est ce qui est utilisé dans mon école.
Marsh Posté le 31-01-2006 à 20:48:19
le return 0; manque ouai, mais bon c'est pas +/- automatique s'il manque sur les bon compilateurs ?
Marsh Posté le 31-01-2006 à 20:52:30
Sve@r a écrit : Etant donné qu'un nom est lié à un prénom et une note, il serait judicieux de les regrouper dans une structure
|
oui bien sûr une structure serait on ne peut plus approprié ici, mais je n'ai pas le droit de les employer ici
Marsh Posté le 31-01-2006 à 20:57:04
MEI a écrit : le return 0; manque ouai, mais bon c'est pas +/- automatique s'il manque sur les bon compilateurs ? |
ben visiblement pas pcq c'est pas corrigé par le mien.
qqes questions :
Marsh Posté le 31-01-2006 à 21:01:50
--> D'apres le post d'Emmanuel Delahaye je dirais qu'il utilise g++.
--> Bah il me semble bien que le void main() n'est tout bonnement pas admis par la norme ANSI et que c'est FORCEMENT int main().
Marsh Posté le 31-01-2006 à 21:10:42
MEI a écrit : --> D'apres le post d'Emmanuel Delahaye je dirais qu'il utilise g++. |
lol bah concernant la norme ANSI c'est justement pour ça qu'on utilise le void main() selon le prof ...
sinon as-tu testé le code ? parce que moi, que ce soit en ayant corrigé le mien ou bien en ayant copié collé le tiens puis compilé, je reste coincé au même pb... ie qu'il n'affiche aucun des résultats.
edit même avec le return (); à la fin
Marsh Posté le 31-01-2006 à 21:16:07
tyler1207 a écrit : lol bah concernant la norme ANSI c'est justement pour ça qu'on utilise le void main() selon le prof ... |
Oh là là... change de prof ou alors fais-toi rembourser...
"main()" ne change pas de type au gré du vent (ou du prof)... et son type est "int". C'est comme si on disait "boaf, strlen() est parfois de type float, parfois de type double..."
Marsh Posté le 31-01-2006 à 21:21:33
je cherche pas à défendre l'indéfendable, mais qd je crée un nvx projet ac lcc, j'ai par défaut un code (celui du fichier d'aide je pense) qui s'affiche et il y a un void main () tout au début.
dans les fait que je mette void ou int ça change quoi ?
en tout cas rien au fait que j'arrive tjrs pas à afficher les results !
Marsh Posté le 31-01-2006 à 21:36:03
dans la structure while, est-ce possible de mettre plusieurs conditions ?
Marsh Posté le 31-01-2006 à 21:37:17
tyler1207 a écrit : lol bah concernant la norme ANSI c'est justement pour ça qu'on utilise le void main() selon le prof ... |
change d'école. et je suis sérieux
Marsh Posté le 31-01-2006 à 21:38:10
pour le while oui et non ... suffit de faire :
while((expression1) && (expression2))
Marsh Posté le 31-01-2006 à 21:41:53
MEI a écrit : pour le while oui et non ... suffit de faire : |
jdoutais mais j'avais mis ça
Marsh Posté le 31-01-2006 à 21:44:42
Joel F a écrit : change d'école. et je suis sérieux |
jtiens à préciser que je ne suis pas dans une école d'ing d'info, le C est un outil moyennement important dans ce que je fais. Donc changer d'école pour ça hein
Marsh Posté le 31-01-2006 à 21:45:58
T'es dans quel ecole et spécialité par curiosité ?
Marsh Posté le 31-01-2006 à 21:51:18
Ismans, méca et matériaux
le C me servira un petit peu pour faire des bacon sous samcef.
mais disons que j'aime pas mal l'info (bien qu'en prog pure je n'ai pas de connaissances particulières mis à part le html... c'est dire) et que ça me gène pas du tout de faire plus qd mes cours croisent ce domaine. (on est d'accord, je débute en C)
Marsh Posté le 31-01-2006 à 21:55:19
tyler1207 a écrit :
|
C'est le forum. Quand tu utilises les balises
[code=C] et [/code] |
Citation :
|
http://mapage.noos.fr/emdel/notes.htm#typemain
Marsh Posté le 31-01-2006 à 21:55:28
HTML != programmation
et même si c'ets pour faire peu de C, c'est aps une raison d'en faire du moche
Marsh Posté le 31-01-2006 à 21:57:16
Voilà une version C++ qui marche et qui fait 3x moins de ligne. On devrais pouvoir s'en inspirer pour faire une version C qui marche je pense. Comme je n'ai jamais codé en C je suis pas terrible terrible avec les "chaine de caractère" dans ce language.
Code :
|
Marsh Posté le 31-01-2006 à 21:57:36
MEI a écrit : --> D'apres le post d'Emmanuel Delahaye je dirais qu'il utilise g++. |
Pour compiler du C? Ce serait suicidaire ! Non c'est bien gcc avec les bons reglages :
"Once again with feelin'"
|
Marsh Posté le 31-01-2006 à 21:58:19
Joel F a écrit : HTML != programmation |
c'est pour ça que y'a un "....c'est dire" juste après
pour le reste, entièrement d'accord, je disais juste que c'est pas une raison pour changer d'école !
Marsh Posté le 31-01-2006 à 21:59:55
alors le
Code :
|
c'est le prototype de la fonction!
Main doit retourner un int, c'est comme ca.
edit: by emmanuel et en plus il a le lien
Si tu veux le prototype complet c'est meme
Code :
|
mais bon quand tu t'en sers pas des arguments tu peux te contenter de
Code :
|
Pour ce qui est de return, c'est pas
Code :
|
mais
Code :
|
la methode main demande que l'on retourne un entier donc c'est ce que tu fais, le 0 est en general employe pour dire que tout s'est bien passé.
Apres tu peux aussi mettre
Code :
|
qui fera la meme chose (EXIT_SUCCESS etant une constante definie dans stdlib.h me semble t-il )
Marsh Posté le 31-01-2006 à 22:01:00
Emmanuel Delahaye a écrit : Pour compiler du C? Ce serait suicidaire ! Non c'est bien gcc avec les bons reglages :
|
-Wall ne serait-il pas plus rapide ?
Marsh Posté le 31-01-2006 à 22:01:34
|
pas -O3 ??
Marsh Posté le 31-01-2006 à 22:01:58
MEI a écrit : -Wall ne serait-il pas plus rapide ? |
Non, car il test pour de strucs un peu cons qui cherchent à rien
Marsh Posté le 31-01-2006 à 22:05:58
tyler1207 a écrit : lol bah concernant la norme ANSI c'est justement pour ça qu'on utilise le void main() selon le prof ... |
Ce prof est nul.
Marsh Posté le 31-01-2006 à 22:08:52
Reply
Marsh Posté le 31-01-2006 à 16:04:36
j'aimerais savoir s'il est possible de metrre un if dans un else en fait parce que qd je le fais j'ai un " unrecognized statement " de la part de lcc qd je compile...
pour clarifier les choses, il s'agit de trier juste 3 valeurs (par comparaison >= ou =< ) et d'en afficher la plus grande.
si besoin jmet la partie du code qui merde.