News
Challenges
Crackme
ClientSide
Cryptographie
Forensics
Hacking
Logique
Programmation
Stéganographie
Wargame
Tous les challenges
Forum
Tutoriaux
FAQ
Liens utiles
IRC
Newbie Connect
Liens
Partenaires
Réglement
Goodies
L'incubateur
A propos
L'équipe
Hall Of Fame
NewbieContest
Programmation
»
Langages compilés
»
[C] problème de calcules
Username:
1 heure
1 jour
1 semaine
1 mois
Toujours
Password:
Accueil
Aide
Rechercher
Recherche rapide
Recherche avancée
[Fermer]
Identifiez-vous
Inscrivez-vous
Pages: [
1
]
2
Imprimer
Auteur
Fil de discussion: [C] problème de calcules (Lu 18527 fois)
Beat
Profil challenge
Classement : 35258/55560
Néophyte
Hors ligne
Messages: 5
[C] problème de calcules
«
le:
24 Novembre 2006 à 18:30:06 »
salut à tous , jais fait un petit programme en C comme TP, il permet de faire des calculs :
addition multiplication soustraction et division, bref des truc basiques. mais le problème c'est que lors de la compilation il ya des erreures, notamen pour "Case"
voila donc le code :
Code:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
printf(" ---------------------\n");
printf("| .-=FIRST PROGRAM v1.0=-. |\n");
printf(" ---------------------\n\n\n");
printf("Please select your choice : ");
char choice;
scanf("%ld", &choice);
printf("\n\n1- Addition\n2- Multiplication\n3- Subtraction\n4- Division\n\n\n");
switch(choice)
{
case 1:
float chiffre1, chiffre2;
printf("Enter the first number : ");
scanf("%lf", &chiffre1);
printf("\nEnter the second number : ");
scanf("%lf", &chiffre2);
float resultat = chiffre1 + chiffre2;
printf("\nResult of %lf + %lf is = %lf", chiffre1, chiffre2, resultat);
break;
case 2:
float chiffre3, chiffre4;
printf("Enter the first number : ");
scanf("%lf", &chiffre3);
printf("\nEnter the second number : ");
scanf("%lf", &chiffre4);
float resultat2 = chiffre3 * chiffre4;
printf("\nResult of %lf + %lf is = %lf", chiffre3, chiffre4, resultat2);
break;
case 3:
float chiffre5, chiffre6;
printf("Enter the first number : ");
scanf("%lf", &chiffre5);
printf("\nEnter the second number : ");
scanf("%lf", &chiffre6);
float resultat3 = chiffre5 - chiffre6;
printf("\nResult of %lf + %lf is = %lf", chiffre5, chiffre6, resultat3);
break;
case 4:
float chiffre7, chiffre8;
printf("Enter the first number : ");
scanf("%lf", &chiffre7);
printf("\nEnter the second number : ");
scanf("%lf", &chiffre8);
float resultat4 = chiffre7 / chiffre8;
printf("\nResult of %lf + %lf is = %lf", chiffre7, chiffre8, resultat4);
break;
}
system("PAUSE");
printf("\n\n\nThis was : FIRST PROGRAM v1.0 by t0Xic.h\n\n\n");
system("PAUSE");
return 0;
}
vous auriez des idées ?
-----------------------------------------------------------------------------------------------------
PS :J'utilise Dev C++
Voila le log de compilation
Code:
Compilateur: Default compiler
Exécution de g++.exe...
g++.exe "D:\Documents and Settings\M\Bureau\C\Projet 1\Source\FIRST PROGRAM v1.0.cpp" -o "D:\Documents and Settings\M\Bureau\C\Projet 1\Source\FIRST PROGRAM v1.0.exe" -I"C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include" -I"C:\Dev-Cpp\include\c++\3.4.2\backward" -I"C:\Dev-Cpp\include\c++\3.4.2\mingw32" -I"C:\Dev-Cpp\include\c++\3.4.2" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib"
D:\Documents and Settings\M\Bureau\C\Projet 1\Source\FIRST PROGRAM v1.0.cpp: In function `int main(int, char**)':
D:\Documents and Settings\M\Bureau\C\Projet 1\Source\FIRST PROGRAM v1.0.cpp:34: error: jump to case label
D:\Documents and Settings\M\Bureau\C\Projet 1\Source\FIRST PROGRAM v1.0.cpp:31: error: crosses initialization of `float resultat'
D:\Documents and Settings\M\Bureau\C\Projet 1\Source\FIRST PROGRAM v1.0.cpp:44: error: jump to case label
D:\Documents and Settings\M\Bureau\C\Projet 1\Source\FIRST PROGRAM v1.0.cpp:41: error: crosses initialization of `float resultat2'
D:\Documents and Settings\M\Bureau\C\Projet 1\Source\FIRST PROGRAM v1.0.cpp:31: error: crosses initialization of `float resultat'
D:\Documents and Settings\M\Bureau\C\Projet 1\Source\FIRST PROGRAM v1.0.cpp:54: error: jump to case label
D:\Documents and Settings\M\Bureau\C\Projet 1\Source\FIRST PROGRAM v1.0.cpp:51: error: crosses initialization of `float resultat3'
D:\Documents and Settings\M\Bureau\C\Projet 1\Source\FIRST PROGRAM v1.0.cpp:41: error: crosses initialization of `float resultat2'
D:\Documents and Settings\M\Bureau\C\Projet 1\Source\FIRST PROGRAM v1.0.cpp:31: error: crosses initialization of `float resultat'
Exécution terminée
le problème ne **orthographe !** pas que de case apparament mais bon...
merci d'avance
Journalisée
Leptis
Profil challenge
Classement : 163/55560
Membre Junior
Hors ligne
Messages: 84
[C] problème de calcules
«
#1 le:
24 Novembre 2006 à 18:46:56 »
Les variables ne doivent pas être initialisé dans les conditions du moins dans ce cas !!! (c'est moins embigue maintenant
)
De plus sa ne sert a rien de crer toute ces variables, cré un tableau.
Voila ce que sa pourrai donner avec les switch + une fonction.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int text(float nombre[],int signe)
{
printf("Enter the first number : ");
scanf("%f", &nombre[1]);
printf("\nEnter the second number : ");
scanf("%f", &nombre[2]);
switch(signe)
{
case 1:
nombre[0] = nombre[1] + nombre[2];
printf("\nResult of %f + %f is = %f", nombre[1], nombre[2], nombre[0]);
return 0;
case 2:
nombre[0] = nombre[1] * nombre[2];
printf("\nResult of %f * %f is = %f", nombre[1], nombre[2], nombre[0]);
return 0;
case 3:
nombre[0] = nombre[1] - nombre[2];
printf("\nResult of %f - %f is = %f", nombre[1], nombre[2], nombre[0]);
return 0;
case 4:
if(nombre[2]==0)
{
printf("division par 0 impossible");
return 0;
}
nombre[0] = nombre[1] / nombre[2];
printf("\nResult of %f / %f is = %f", nombre[1], nombre[2], nombre[0]);
return 0;
}
}
int main(int argc, char *argv[])
{
int choice = 0;
float nombre[]={0,0,0};
do{
system("cls");
printf(" --------------------------\n");
printf("| .-=FIRST PROGRAM v1.0=-. |\n");
printf(" --------------------------\n\n\n");
printf("Please select your choice : ");
printf("\n\n1- Addition\n2- Multiplication\n3- Soustraction\n4- Division\n\n\n");
scanf("%d", &choice);
}while ((choice != 1) && (choice != 2) && (choice != 3) && (choice != 4 ));
text(nombre,choice);
printf("\n\n\nIt was : FIRST PROGRAM v1.0 by t0Xic.h, remake a little bit by Leptis ^^\n\n\n");
getch();
return 0;
}
Journalisée
Beat
Profil challenge
Classement : 35258/55560
Néophyte
Hors ligne
Messages: 5
[C] problème de calcules
«
#2 le:
24 Novembre 2006 à 19:08:38 »
il semble ne plus y avoir des bugs lors de la compil mais les calculs ne sont vraiment , mais alors vraimen pas juste du tout
exemple : 1+1 = 12543214000000.2223354
je crois que les variables ne sont pas correctement initialisées ou que les valeures ne sont pas correctement affectée (memoire)
vous en pensez quoi ???
merci quand même
Journalisée
s3th
Relecteur
Profil challenge
Classement : 435/55560
Membre Héroïque
Hors ligne
Messages: 645
[C] problème de calcules
«
#3 le:
24 Novembre 2006 à 19:46:50 »
je ne sais pas si ca a une influence les espaces et les virgules dans la definition des variables.
,chiffre1, chiffre2 ,chiffre3, chiffre4,chiffre5, chiffre6,chiffre7
Journalisée
..\m/.. Tout n'est qu'illusion ..\m/..
http://backtrack-fr.net/
3NJ0Y et non pas enjoy comme certaine tapz
_o_
Relecteur
Profil challenge
Classement : 51/55560
Membre Héroïque
Hors ligne
Messages: 1258
[C] problème de calcules
«
#4 le:
24 Novembre 2006 à 19:56:14 »
Citation de: Beat
je crois que les variables ne sont pas correctement initialisées ou que les valeures ne sont pas correctement affectée (memoire)
En C, l'initialisation des variables est à la charge du programmeur. Une excellente habitude est de systématiquement affecter une valeur par défaut à une variable lors de sa déclaration :
Code:
int plop = 0;
char chaine[25] = "";
FILE *in = NULL;
Sinon, je signale que dans le code, là, on voit pleins de trucs bancals :
- le scanf met un entier dans un caractère.
- le switch se fait sur un caractère, mais la comparaison par case se fait sur un entier (la conséquence de ces deux trucs là, c'est que ça peut compiler, mais ça va clairement pas donner les résultats espérés).
Note sur les deux points précédents : un bon compilo (je connais pas le tien) a toujours des paramètres permettant de compiler en affichant tous les avertissements. C'est toujours une bonne habitude de l'utiliser, un avertissement à la compil indique au mieux que l'on ne fait pas les choses comme c'est prévu, au pire qu'il y a un gros bug.
- y'a possibilité de réaliser une division par zéro, car le cas n'est pas testé.
- les affichages donnent toujours une addition, quelque soit l'opération réalisée.
- selon les compilos (et les normes qu'ils suivent), on peut ne pas avoir le droit de déclarer des variables au milieu d'un bloc (les float result seraient à déplacer).
- essayez tous (c'est pas la première fois que je le vois) d'éviter de faire des appels à system(), surtout si c'est pour appeler un utilitaire clairement disponible sur une seule plateforme. Le truc n'est donc pas portable.
Citation de: Leptis
une variable ne dois jamais etre initialisé dans une condition !!!!!
Première nouvelle. Les variables doivent être déclarées au début d'un bloc. Ce bloc peut aussi bien être dans un case, un if, ou n'importe quelle structure de contrôle. Au contraire, d'ailleurs, c'est une excellente idée de limiter la portée d'une variable en la déclarant dans le seul bloc où elle a un sens, ça évite plein de bugs idiots et chiants à trouver.
Journalisée
Les épreuves de hack de NC sont trop faciles ? Et pourtant ! Bienvenue dans la vraie vie :
http://thedailywtf.com/Articles/So-You-Hacked-Our-Site!.aspx
Leptis
Profil challenge
Classement : 163/55560
Membre Junior
Hors ligne
Messages: 84
[C] problème de calcules
«
#5 le:
24 Novembre 2006 à 20:15:22 »
Citation
Première nouvelle. Les variables doivent être déclarées au début d'un bloc. Ce bloc peut aussi bien être dans un case, un if, ou n'importe quelle structure de contrôle. Au contraire, d'ailleurs, c'est une excellente idée de limiter la portée d'une variable en la déclarant dans le seul bloc où elle a un sens, ça évite pleins de bugs idiots et chiant à trouver.
Je parlait dans ce cas si, il est inutile de déclarer tous ces float puisque au final seulement seul 3 varibles servent dans chaques cas (à initialiser avant le switch (condition)).
Journalisée
Beat
Profil challenge
Classement : 35258/55560
Néophyte
Hors ligne
Messages: 5
[C] problème de calcules
«
#6 le:
24 Novembre 2006 à 20:32:23 »
merci à tous
je crois qu'il n' y a plus de quoi chômer là ...
Journalisée
neoflo
Profil challenge
Classement : 8267/55560
Membre Complet
Hors ligne
Messages: 171
[C] problème de calcules
«
#7 le:
24 Novembre 2006 à 21:24:37 »
Citation de: _o_
Une excellente habitude est de systématiquement affecter une valeur par défaut à une variable lors de sa déclaration
Pourtant, la plupart des programmeurs C sont d'accord sur le fait de séparer déclaration et affectation.
Je dis au passage que :
Code:
float chiffre1, chiffre2;
printf("Enter the first number : ");
scanf("%lf", &chiffre1);
printf("\nEnter the second number : ");
scanf("%lf", &chiffre2);
float resultat = chiffre1 + chiffre2;
printf("\nResult of %lf + %lf is = %lf", chiffre1, chiffre2, resultat);
break;
Tu as toujours une forme similiaire pour chaque cas de ton switch. Tu devrais penser à utiliser une fonction pour plus de clareté
Journalisée
http://humbert-florent.developpez.com/
zours
Profil challenge
Classement : 575/55560
Membre Héroïque
Hors ligne
Messages: 811
[C] problème de calcules
«
#8 le:
24 Novembre 2006 à 21:57:02 »
Citation de: neoflo
Pourtant, la plupart des programmeurs C sont d'accord sur le fait de séparer déclaration et affectation.
C'est pas que pour le C, d'ailleurs. Pour la plupart des langages, on conseille de déclarer les variables en début de bloc, proprement, et sans initialisation, avec si nécessaire du commentaire pour en expliquer l'utilité. Le "dictionnaire de données", quoi.
Par contre, on conseille aussi de les initialiser juste après si possible, ou d'y faire très attention par la suite.
Journalisée
Gardel
Profil challenge
Classement : 695/55560
Membre Héroïque
Hors ligne
Messages: 1012
[C] problème de calcules
«
#9 le:
25 Novembre 2006 à 00:07:54 »
Qu'est-ce que ça apporte de plus de déclarer une variable sans lui affecter de valeur directement ?
Journalisée
Selon le postulat que les filles, c'est du temps accordé et de l'argent dépensé : Filles = Temps . Argent
Et comme chacun le sait, "le temps c'est de l'argent", donc : Temps = Argent
Par conséquent : Filles = Argent . Argent
Et parce que, "l'argent est la racine du mal" : Argent = sqrt(Mal)
On en déduit que : Filles = sqrt(Mal).sqrt(Mal)
Force est de constater que : Filles = Mal
neoflo
Profil challenge
Classement : 8267/55560
Membre Complet
Hors ligne
Messages: 171
[C] problème de calcules
«
#10 le:
25 Novembre 2006 à 00:53:37 »
Citation de: Gob
Qu'est-ce que ça apporte de plus de déclarer une variable sans lui affecter de valeur directement ?
Je vais essayer de te donner des éléments de réponses pour le langage C.
Pour des raisons historiques, on a défini pas mal de compilateur où les blocs d'instructions étaient découpés en : déclaration | liste d'instruction. La grammaire de ce type de langage est beaucoup plus simple à écrire. C'est une habitude que certains ont pris
De même, dans les notations algorithmiques classiques qui font intervenir des déclarations, on déclare déjà tout avant sans les initialiser à l'instar des langages décrites par le type de grammaire que j'ai donné avant.
Avant la norme C89 (même C99 pour certains cas), le fait de devoir placer les déclarations en début de bloc était une contrainte du langage. C'est vraiment que maintenant, c'est plutôt devenu une contrainte méthodologique car ça peut permettre de gagner en lisibilité.
Lorsque le nombre de déclaration est assez importante, cela rend plus lisible les commentaires liés à l'utilisation d'une variable particulière.
Cela dit, certains types de variables nécessite de les initialiser dès la déclaration, notamment les variables static (elles sont déclarés et initialisé une seule fois dans toute l'exécution du programme).
Ensuite, je ne parle pas des initialisations en cascade du type :
int i,j,k;
C'est aussi à éviter car certaines erreurs arrivent fréquemment, notamment avec des déclarations du type :
Code:
FILE* f1, f2;
Et oui, c'est une feinte, f2 n'est pas de type FILE* mais du type FILE.
Journalisée
http://humbert-florent.developpez.com/
Nebelmann
Profil challenge
Classement : 488/55560
Membre Héroïque
Hors ligne
Messages: 1357
[C] problème de calcules
«
#11 le:
25 Novembre 2006 à 09:32:36 »
Citation
C'est aussi à éviter car certaines erreurs arrivent fréquemment, notamment avec des déclarations du type :
Code:
FILE* f1, f2;
Et oui, c'est une feinte, f2 n'est pas de type FILE* mais du type FILE.
suffit d'écrire :
Code:
FILE *f1, f2;
et il n'y a plus aucune ambiguïté...
Journalisée
-- Nebelmann -- Registered linux user
#429186
«Si les lecteurs étaient des compilateurs, les posteurs feraient peut-être davantage attention à ce qu'ils écrivent...»
neoflo
Profil challenge
Classement : 8267/55560
Membre Complet
Hors ligne
Messages: 171
[C] problème de calcules
«
#12 le:
25 Novembre 2006 à 10:56:11 »
Citation de: Nebelmann
FILE *f1, f2;
et il n'y a plus aucune ambiguïté...
Heu, tu as recopié la même chose que moi
Ah si, tu as déplacé l'* sur le f1... Enfin, c'est bof comme changement.
Journalisée
http://humbert-florent.developpez.com/
Nebelmann
Profil challenge
Classement : 488/55560
Membre Héroïque
Hors ligne
Messages: 1357
[C] problème de calcules
«
#13 le:
25 Novembre 2006 à 10:57:27 »
Pas du tout, j'a collé l'étoile à f1 pour enlever le piège : le pointeur n'est plus considéré sur FILE mais sur f1 !
Journalisée
-- Nebelmann -- Registered linux user
#429186
«Si les lecteurs étaient des compilateurs, les posteurs feraient peut-être davantage attention à ce qu'ils écrivent...»
neoflo
Profil challenge
Classement : 8267/55560
Membre Complet
Hors ligne
Messages: 171
[C] problème de calcules
«
#14 le:
25 Novembre 2006 à 11:01:16 »
Citation de: Nebelmann
Pas du tout, j'a collé l'étoile à f1 pour enlever le piège : le pointeur n'est plus considéré sur FILE mais sur f1 !
Je sais très bien que l'exemple que je vais donner ne devrait pas arriver. Mais on sait jamais, si on reprend une bibliothèque fait ce type d'erreur (ça peut arriver pour des amateurs), ça fout tout en l'air :
Code:
#define Fichier FILE*
Fichier a,b;
a et b ne sont plus du même type.
EDIT : j'ai déjà vu des mini bibliothèques de fonctions fait pas des scientifiques pas forcement très bon programmeur... Ca ne respecte pas forcement trop le codage habituel en C
EDIT2 : Enfin, je dis ça (pour la séparation initialisations/déclarations), mais ça m'arrive de le faire
Journalisée
http://humbert-florent.developpez.com/
Pages: [
1
]
2
Imprimer
Aller à:
Merci de choisir une destination:
-----------------------------
Général
-----------------------------
=> Proposition de tutoriaux
=> Général
=> Suggestions/Dev. du site
=> Projet en Cours
=> Defouloir
=> Sondage pour le site
=> Bugs
-----------------------------
News
-----------------------------
=> News du site
=> News Hacking/Cracking/Phreaking
=> News Informatique/Hardware/Tuning
-----------------------------
Challenges
-----------------------------
=> Aide Crackme
=> Aide Cryptographie
=> Aide Forensics
=> Aide Hacking
=> Aide Javascript/Java/HTML
=> Aide Logique
=> Aide Programmation
=> Aide Stéganographie
=> Aide Wargame
-----------------------------
Afterwards
-----------------------------
=> Afterwards Crackme
=> Afterwards Cryptographie
=> Afterwards Forensics
=> Afterwards Hacking
=> Afterwards Javascript/Java/HTML
=> Afterwards Logique
=> Afterwards Programmation
=> Afterwards Stéganographie
=> Afterwards Wargame
-----------------------------
Divers
-----------------------------
=> Linux
=> Hacking
=> Cracking
=> Hardware
=> Informatique
-----------------------------
Programmation
-----------------------------
=> Langages compilés
=> Autres langages
=> Langages Web
Chargement...