rockerguitar
Messages postés6Date d'inscriptionjeudi 14 décembre 2006StatutMembreDernière intervention18 décembre 2006
-
14 déc. 2006 à 20:53
Slidi
Messages postés3Date d'inscriptionlundi 18 décembre 2006StatutMembreDernière intervention18 décembre 2006
-
18 déc. 2006 à 17:37
Bonsoir à tous !
Je suis nouveau dans le monde de la programmation. J'ai commencé il y a 3 jours. Mon projet est de créer un jeu musical sur la Nintendo Wii, en utilisant la Wiimote. Comme vous le voyez, je suis un amoureux des jeux vidéos ^^
J'ai 15 ans, j'habite à Marseille, et mon prénom, c'est Olivier. Voila.
J'ai voulu créer une calculatrice dans la console Win32, mais il y a une problème, je ne saurait l'expliquer, mais je vous donne mon code, pour que vous puissiez tou de même m'aider :
#include
<stdio.h>
#include
<stdlib.h>
int
main(
int
argc,
char
*argv[]){
long
choixOperation;
printf(
"Operation\n\n"
);printf(
"1. Addition\n"
);printf(
"2. Soustraction\n"
);printf(
"3. Multiplication\n"
);printf(
"4. Division\n"
);printf(
"\nVotre choix ? "
);scanf(
"%ld"
, &choixOperation);
printf(
"\n"
);
switch
(choixOperation){
case
1:printf(
"Addition"
);
break
;
case
2:printf(
"Soustraction"
);
break
;
case
3:printf(
"Multiplication"
);
break
;
case
4:printf(
"Division"
);
break
;
default
:printf(
"C'est pourtant pas dur de choisir entre 1, 2, 3 et 4 non ?"
);
Je programme sous Visual C++ 2005 Express. Je tiens à vous dire que ce code comporte tous les points-virgule et guillemets ou autre, simplement, il ne marche pas correctement.
Merci d'avance.
switch (choixOperation)
{
case 1:
printf("Addition");
break;
case 2:
printf("Soustraction");
break;
case 3:
printf("Multiplication");
break;
case 4:
printf("Division");
break;
default:
printf("C'est pourtant pas dur de choisir entre 1, 2, 3 et 4 non ?");
break;
}
printf("\n\n");
long resultat 0, nombre1 0, nombre2 = 0;
printf("Entrez le nombre 1 : ");
scanf("%ld", &nombre1);
printf("Entrez le nombre 2 : ");
scanf("%ld", &nombre2);
cs_Joky
Messages postés1787Date d'inscriptionlundi 22 novembre 2004StatutMembreDernière intervention31 janvier 20092 15 déc. 2006 à 07:12
T'as de l'ambition dis donc pour ton Projet :D
Sinon remplace ton long choixOperation par un int choixOperation voir même un short int c'est encore mieux et dans scanf tu lis un entier avec %i
Je pense que %ld attend un double, je suis pas sur...
Voilà bon courage pour la Wii :s
ULARGE_INTEGERJokyQi=QI("Joky"
rockerguitar
Messages postés6Date d'inscriptionjeudi 14 décembre 2006StatutMembreDernière intervention18 décembre 2006 15 déc. 2006 à 08:53
Merci de ta réponse !
Il reste cependant un problème encore : c'est que, lorsque je lance l'application, je choisis l'opération, là ça marche, je rentre deux nombres à calculer, ça marche aussi, mais après, il me donne le résultat de l'addition, la soustraction, la multiplication et la division des nombres chosis alors que j'ai demandé par exemple une addition (ça marche si je demande les trois autres type d'opération). C'est ça que je ne comprends pas :-(.
Mais merci quand même pour tes encouragements et ta réponse ;-)
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 15 déc. 2006 à 12:12
Salut:
Tu peux remplacer ton switch par des pointeurs de fonctions.
Vous n’avez pas trouvé la réponse que vous recherchez ?
switch (choixOperation)
{
case 1:
printf("Addition");
rep=add(a,b);
break;
case 2:
printf("Soustraction");
rep=sub(a,b);
break;
case 3:
printf("Multiplication");
rep=mul(a,b);
break;
case 4:
printf("Division");
rep=div(a,b);
break;
default:
printf("C'est pourtant pas dur de choisir entre 1, 2, 3 et 4 non ?");
break;
}
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 15 déc. 2006 à 15:37
Salut:
Tu n'a pas compris ce que je voulais dire:
// Tableau de pointeurs de fonctions
float (*ptr) (int, int) [4] = {add, sub, mul, div};
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 15 déc. 2006 à 16:06
Salut:
Il faut toujours voir lointain, sinon on risque de ne pas progresser ami.
rockerguitar
Messages postés6Date d'inscriptionjeudi 14 décembre 2006StatutMembreDernière intervention18 décembre 2006 15 déc. 2006 à 18:56
Merci à tous pour vos réponses.
En effet, switch attend un "int" désolé de l'erreur. Merci turnerom ;-).
Cependant, le problème n'est pas réglé : le programme affiche toujours le résultat des 4 opérations, alors qu'on en choisi qu'une
=> j'appuie sur 1 puis Entrée, je met le premier nombre, Entrée, le second nombre, Entrée et là s'affiche les résultats pour l'addition (ce que j'ai choisi), mais aussi la soustraction, la multiplication et la division.
Un calculette multiple quoi ^^.
Oui, mon projet est impressionnant, fou, mais c'est un challenge de le réussir. J'y arriverais ;-) promis.
Merci à tous !
P.S : si quelqu'un pouvait m'expliquer le problème de mon code pour qu'il affiche juste le résultat de l'opération choisie, je le remercierait chaleureusement :D .
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 15 déc. 2006 à 20:20
Salut:
luthor> Joli métaphore, mais tu dois savoir que la chance sourit aux audacieux.
rockerguitar> As tu oublié de mettre les mots clefs: break?
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 15 déc. 2006 à 22:12
Avant d'utiliser les pointeurs de fonctions, il faut déja bien maitriser les pointeurs, ce qui n'est pas toujours évident pour un débutant. Je pense que c'est aussi bien de s'en tenir à un switch, même si un tableau de fonctions est une bonne idée ici.
Quand au débat entre les int et les long, il n'a pas lieu d'être: on peut mettre ce qu'on veut dans un switch, pourvu que ce soit un type entier (quelque soit sa taille)
Pour le projet sur la Wii, je veux pas être désagréable (juste réaliste), il te faudra encore de nombreuses années de travail avant d'y parvenir
float div(int a, int b)
{
if(b==0)
{
fprintf(stderr, "Impossible de diviser par 0");
return -999;
return (float) a/b;
}
Très mauvaise idée de faire ca, tu n'a aucun moyen de savoir si -999 est le code d'erreur ou bien la valeur de la division (car div(-999, 1) retourne aussi -999). Utilise plutot une autre variable qui servira juste à indiquer une erreur
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 15 déc. 2006 à 22:54
Salut:
Je pense qu'une variable globale servira pour signaler l'erreur.
#define TRUE 1
#define FALSE 0
int g_Erreur = FALSE;
float div (int a, int b) {
if (b == 0) {
g_Erreur = TRUE;
return .0f;
}
return (float) a/b;
}
Slidi
Messages postés3Date d'inscriptionlundi 18 décembre 2006StatutMembreDernière intervention18 décembre 2006 18 déc. 2006 à 13:35
Pour les deux derniers, a/b avec b= 0 est possible, c'est si a=0 que c'est pas possible, on l'apprend en math :P
Sinon pour répondre à rockerguitar, qui a toujours un problème, le problème vient du fait que tu ais écrit plusieurs If à la suite.
Pour régler le problème, il te suffit de rajouter else devant les dernier if. Ca donne ceci:
#include<stdio.h>
#include<stdlib.h>
int main( int argc, char *argv[])
{
long nombre1 =0, nombre2 =0;
long resultat =0;
long choixOperation =0;
switch (choixOperation)
{
case 1:
printf("Addition" );
break ;
case 2:
printf("Soustraction" );
break ;
case 3:
printf("Multiplication" );
break ;
case 4:
printf("Division" );
break ;
}
printf("\n\nEntrez le nombre 1 :");
scanf("%ld" , &nombre1);
printf("Entrez le nombre 2 :");
scanf("%ld" , &nombre2);
if (choixOperation == 1) //Le premier en If et ensuite des Else if
{
resultat = nombre1 + nombre2;
printf ("\n\n%ld + %ld = %ld\n" , nombre1, nombre2, resultat);
}
else if (choixOperation == 2)
{
resultat = nombre1 - nombre2;
printf ("\n\n%ld - %ld = %ld\n" , nombre1, nombre2, resultat);
}
else if (choixOperation == 3)
{
resultat = nombre1 * nombre2;
printf ("\n\n%ld * %ld = %ld\n" , nombre1, nombre2, resultat);
}
else if (choixOperation == 4)
{
resultat = nombre1 / nombre2;
printf ("\n\n%ld / %ld = %ld\n" , nombre1, nombre2, resultat);
}
system("PAUSE" );
}
Comme ça plus de problème, alors en haut pour ton menu j'ai mis une boucle pour que tant que l'utilisateur n'entre pas 1,2,3 ou 4 le menu se réaffiche pour luidemander son choix. Tu avais eu un embrillon d'idée avec ta phrase qui disait "C'est pourtant pas compliqué de chois......" mais apres le choix n'était plus proposé et ça passait tout de suite à la demande des nombres.
Enfin j'ai remplacer tes If... If... If... If... par If... Else If... Else If... Else If... et là plus de problème.
Il te reste plus qu'a changer les nombre entier en décimaux pour avoir les divisions justes
turnerom
Messages postés492Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention12 janvier 20121 18 déc. 2006 à 13:57
Que de concentré de co****ie en un seul message.
--> Pour les deux derniers, a/b avec b=0 est possible, c'est si a=0 que c'est pas possible, on l'apprend en math :P
Bon ben révise tes maths alors !!!
0/2 = 0
2/0 = erreur
Quand au if / if ... else, je suis désolé, mais faut m'expliquer comment choixOperation peut égaler 1, 2, 3 et 4 en meme temps !!!!!
Le if else change rien à ce problème la (bien que cela permette d'avoir un code infinitésimalement (joli mot hein !) plus rapide dans certain cas)
rockerguitard, tu peux reposter ton code pour voir ce qui va pas stp ?
Slidi
Messages postés3Date d'inscriptionlundi 18 décembre 2006StatutMembreDernière intervention18 décembre 2006 18 déc. 2006 à 16:40
Oula oué faut que j'aille revoir ce que j'ai dit sur les maths Oo là j'ai abusé xD.
Par contre si tu veux le code de rokerguitard, c'est facile tu va à la 1ère page.
"Quand au if / if ... else, je suis désolé, mais faut m'expliquer comment choixOperation peut égaler 1, 2, 3 et 4 en meme temps !!!!!"
Là je comprends pas, tu t'es peut être embrouillé. J'ai mis if puis else if, donc si c'est =1 alors fais ça, sinon si c'est =2 fais ça, sinon etc... donc il n'y a plus d'égalité en même temps qui avait lieu dans le cas où rokerguitard ne mettait que des If et même là on peut pas parler d'égalité Oo
donc méa culpa pour la division par contre le reste nan :)