Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Aide en C \Problème


XmichouX

Messages recommandés

Bonjour à tous !

 

Je suis un novice en C, d'ailleurs je suis maintenant les cours sur le site de zéro au compte gouttes :P (manque de temps ! ).

 

Voilà, je m'explique, j'ai un problème d'exportation de mon petit fichier !

Je m'explique, sur mon ordinateur, il marche, sur un autre ordi que j'ai avec Visual C++ (que j'utilise), ça marche également !

J'ai tenté de l'envoyer à d'autres personnes, hélas ça ne marche pas (quelque chose comme application valide ! pourtant les includes sont bien là ce qui fait mon incompréhension !)

 

Merci donc de me signaler si quelqu'un aurait une quelconque idée.

J'en ai parlé dans un autre topic sur IDN (mais pas de réponse pour ce problème précis), mais ce n'était pas le sujet initial -> http://www.infos-du-net.com/forum/page-267211_21_40.html

 

Voilà le code ( si vous trouviez une erreur susceptible de provoquer ce dysfonctionnement !):

 

#include <stdio.h>
#include <stdlib.h>
#include <math.h> 
#include "jeu.h"

int main (int argc, char *argv[])
{
long score= 10, nombre1= 4 , nombre2= 22, nombre3= 13, nombre4= 12, nombre5=3 , nombre6= 99, nombre7= 9, nombre8= 62, nombre9= 49, nombre10= 11;
long resultat1, nombretape = 0;
double resultat2, nombretape2;

printf ("Bienvenue dans mon jeu ! \n Durant ce jeu, il vous sera pose differents calculs de tete en un temps precis, le score sera affiche a la fin, a vous de voir ce que vous valez ! \n\n\n");

carre (&nombre1, &resultat1);

printf ("Tapez le carre de ce nombre : %ld \n", nombre1);
scanf ("%ld", &nombretape);
if ( nombretape==resultat1 )
{
	printf("\n Bravo, le resultat est correct! \n");
}
PRESQUE(nombretape, resultat1) 
LOIN(nombretape, resultat1) 
NUL(nombretape, resultat1)

	fonction2 (&nombre2, &resultat1);

printf("\n Mutlipliez ce nombre par 4, retirez lui deux, multipliez par 3 : %ld \n", nombre2);
scanf ("%ld", &nombretape);
if ( nombretape==resultat1 )
{
	printf("\n Bravo, le resultat est correct! \n");
}
PRESQUE(nombretape, resultat1) 
LOIN(nombretape, resultat1) 
NUL(nombretape, resultat1)

	fonction6 (&nombre3, &resultat2);

printf("\n Mutlipliez ce nombre par 5, et divisez le par 2 : %ld \n", nombre3);
scanf ("%lf", &nombretape2);
if ( nombretape2==resultat2 )
{
	printf("\n Bravo, le resultat est correct! \n");
}
PRESQUE(nombretape2, resultat2) 
LOIN(nombretape2, resultat2) 
NUL(nombretape2, resultat2)

	carre (&nombre4, &resultat1);

printf("\n Tapez le carre de ce nombre : %ld \n", nombre4);
scanf ("%ld", &nombretape);
if ( nombretape==resultat1 )
{
	printf("\n Bravo, le resultat est correct! \n");
}
PRESQUE(nombretape, resultat1) 
LOIN(nombretape, resultat1) 
NUL(nombretape, resultat1)

	cube (&nombre5, &resultat1);

printf("\n Tapez le cube de ce nombre : %ld \n", nombre5);
scanf ("%ld", &nombretape);
if ( nombretape==resultat1 )
{
	printf("\n Bravo, le resultat est correct! \n");
}
PRESQUE(nombretape, resultat1) 
LOIN(nombretape, resultat1) 
NUL(nombretape, resultat1)

	fonction4 (&nombre6, &resultat1);

printf("\n Mutlipliez ce nombre par 10, puis retirez lui 225 : %ld \n", nombre6);
scanf ("%ld", &nombretape);
if ( nombretape==resultat1 )
{
	printf("\n Bravo, le resultat est correct! \n");
}
PRESQUE(nombretape, resultat1) 
LOIN(nombretape, resultat1) 
NUL(nombretape, resultat1)

	fonction5 (&nombre7, &resultat1);

printf("\n Mutlipliez ce nombre par 5 et divisez le par 3 : %ld \n", nombre7);
scanf ("%ld", &nombretape);
if ( nombretape==resultat1 )
{
	printf("\n Bravo, le resultat est correct! \n");
}
PRESQUE(nombretape, resultat1) 
LOIN(nombretape, resultat1) 
NUL(nombretape, resultat1)

	fonction3 (&nombre8, &resultat1);

printf("\n Mutlipliez ce nombre par 5, et divisez le par 2 : %ld \n", nombre8);
scanf ("%ld", &nombretape);
if ( nombretape==resultat1 )
{
	printf("\n Bravo, le resultat est correct! \n");
}
PRESQUE(nombretape, resultat1) 
LOIN(nombretape, resultat1) 
NUL(nombretape, resultat1)

	resultat1= sqrt(nombre9) - 2;

printf("\n Calculez la racine carree de ce nombre et retirez lui 2 : %ld \n", nombre9);
scanf ("%ld", &nombretape);
if ( nombretape==resultat1 )
{
	printf("\n Bravo, le resultat est correct! \n");
}
PRESQUE(nombretape, resultat1) 
LOIN(nombretape, resultat1) 
NUL(nombretape, resultat1)

	cube (&nombre10, &resultat1);

printf("\n Tapez le cube de ce nombre : %ld \n", nombre10);
scanf ("%ld", &nombretape);
if ( nombretape==resultat1 )
{
	printf("\n Bravo, le resultat est correct! \n");
}
PRESQUE(nombretape, resultat1) 
LOIN(nombretape, resultat1) 
NUL(nombretape, resultat1)

system("PAUSE");
printf ("Votre score est %ld bonne(s) reponse(s) sur 10 ! \n", score);
if (score==10)
{
	printf ("Bravo, vous etes la perfection meme ! \n");
}

else if (score<10 && score>7)
{
	printf ("Pas mal! Mais peut mieux faire ! \n");
}
else
{
	printf ("Bof, bof, pas terrible, revois ton calcul mental  \n");
}
system("PAUSE");
return 0;
}

long carre (long *nombre, long *resultat)
{
*resultat = (*nombre) * (*nombre);
}

long fonction2 (long *nombre, long *resultat)
{
*resultat = 3 * ((*nombre *4) -2);
}

long fonction3 (long *nombre, long *resultat)
{
*resultat= (5 * *nombre) /2;
}

long cube (long *nombre, long *resultat)
{
*resultat= (*nombre) * (*nombre) * (*nombre);
}

long fonction4 (long *nombre, long *resultat)
{
*resultat= (*nombre * 10) - 225;
}

long fonction5 (long *nombre, long *resultat)
{
*resultat= (*nombre * 5) /3;
}

long fonction6 (long *nombre, double *resultat)
{
*resultat= (5.0 * (double)*nombre) /2;
}













// Fichier d'en tête au programme Jeu.

#define PRESQUE(nombretape, resultat) if (nombretape <= resultat + 5 && nombretape > resultat || nombretape >= resultat - 5 && nombretape < resultat)\
{\
score --;\
	printf ("C'est presque ca ! \n" ); }
#define LOIN(nombretape, resultat) if (nombretape <= resultat +20 && nombretape > resultat + 5 || nombretape >= resultat -20 && nombretape < resultat - 5)\
{\
score --;\
	printf("C'est pas encore ca ^^ \n" ); }
#define NUL(nombretape, resultat) if(nombretape > resultat +20 || nombretape < resultat - 20)\
{\
score --;\
	printf("T'es completement a cote de la plaque ! \n" );  }

long carre (long *nombre, long *resultat);
long fonction2 (long *nombre, long *resultat);
long fonction3 (long *nombre, long *resultat);
long cube (long *nombre, long *resultat);
long fonction4 (long *nombre, long *resultat);
long fonction5 (long *nombre, long *resultat);
long fonction6 (long *nombre, double *resultat);

 

Merci pour les futures réponses !

 

P.S : Si ce post n'a pas sa place dans cette section, merci de m'en informer, je le comprendrais aisément et supprimerai mon sujet !

Je peux comprendre qu'on me dise qu'il aurait été judicieux de mettre mon sujet sur la catégorie programmation du forum, mais je l'ai mis là, histoire de nouer des liens avec des membres de l'équipe sécurité, ce qui me paraît une bonne chose :P

Lien vers le commentaire
Partager sur d’autres sites

Hello,

 

je viens d'essayer ton programme... y'a quelque petit truc qui sont bizarre ^^

 

prenons la fonction carré : tu la définis comme un long, or tu ne retournes rien et tu travailles avec des pointeurs.. il faut donc que tu fases un choix : soit tu restes avec les pointeurs et ta fonction sera un void, soit tu retournes quelque chose, à ce moment la, return resultat par exemple.

 

Sinon, tu devrais utiliser des parenthèses pour tes defines, si tu compiles avec l'option -Wall ( pour gcc ) tu verras qu'il n'apprécie pas plus que ça les longues opérations logiques.

 

Enfin, j'ai eu droit à un petit sh: PAUSE : not found

 

voila je ne sais pas si ça résoudra les problèmes qu'ont rencontré les autres maisce sera un peu plus joli

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Merci pour vos réponses ! :P

 

Tu as tout à fait raison igor pour les pointeurs et la fonction ! Je vais donc mettre ça en void :P (Je voulais m'entraîner avec les pointeurs).

Cependant le void peut-il prendre des paramètres ? Car je viens d'essayer et j'ai des erreurs de ce type

> c:\users\antoine\documents\visual studio 2005\projects\jeu\jeu\jeu.h(20) : voir la déclaration de 'fonction4'

1>.\Jeu.c(180) : error C2371: 'fonction5' : redéfinition ; types de base différents

1> c:\users\antoine\documents\visual studio 2005\projects\jeu\jeu\jeu.h(21) : voir la déclaration de 'fonction5'

1>.\Jeu.c(185) : error C2371: 'fonction6' : redéfinition ; types de base différents

1> c:\users\antoine\documents\visual studio 2005\projects\jeu\jeu\jeu.h(22) : voir la déclaration de 'fonction6'

Exemple d'une fonction que j'ai modifié, histoire d'être sûr que ce n'est pas moi qui aie fait une erreur :

void fonction2 (long *nombre, long *resultat)

{

*resultat = 3 * ((*nombre *4) -2);

}

 

Lorsque tu parles de mettre des parenthèses au define, veux-tu dire mettre entre parenthèses , comme ceci ? :

(#define PRESQUE(nombretape, resultat) if (nombretape <= resultat + 5 && nombretape > resultat || nombretape >= resultat - 5 && nombretape < resultat)\
{\
score --;\
	printf ("C'est presque ca ! \n" ); })
(#define LOIN(nombretape, resultat) if (nombretape <= resultat +20 && nombretape > resultat + 5 || nombretape >= resultat -20 && nombretape < resultat - 5)\
{\
score --;\
	printf("C'est pas encore ca ^^ \n" ); })
(#define NUL(nombretape, resultat) if(nombretape > resultat +20 || nombretape < resultat - 20)\
{\
score --;\
	printf("T'es completement a cote de la plaque ! \n" );  })

Au passage j'aurais pu faire un seul define avec plusieurs conditions à l'intérieur, je suppose ?

 

Merci à toi aussi Domble pour ta réponse :P

Je vais remplacer le system par ce que tu m'as dit ! Je ne vais pas te poser de questions sur le getchar(), sinon je vais me perdre, je m'en suis rendu compte sur le topic ouvert sur idn où je finissais par ne plus comprendre, vu la restriction de mes conaissances sur le sujet. J'avais voulu essayer de faire un compteur de secondes pour rendre le "jeu" plus attrayant mais ça me semble un peu compliqué pour moi pour l'instant !

Sinon igor, les options de compilations ne me disent rien, je ne sais même pas la différence entre un débug et release :P

 

Cependant, vous pensez que ces changements peuvent influer sur le fonctionnement du programme , étant donné que je ne connais quasi personne qui est sous linux ou bien sous mac ? Avez vous déjà eu des problèmes similaires ?

merci, bonne soirée :P

Modifié par XmichouX
Lien vers le commentaire
Partager sur d’autres sites

Merci pour avoir expliqué getchar :P (Si il tape autre chose que entrée ? :P)

 

ça laisse le problème encore plus bizarre :P Le fait qu'il ne marche pas sur les ordis qui n'ont pas de compilateurs "dédiés"..

 

eric_71 avait eu le même problème il n'y a pas longtemps !

Modifié par XmichouX
Lien vers le commentaire
Partager sur d’autres sites

Re,

 

je pensais plus à des parenthèses au niveau des conditions du if pour bien marquer les ET et OU logique, parce que de la façon que tu l'as fait, c'est assez incompréhensible. Il faut établir des priorités dans tes testes de condition.

 

Je n'ai pas regardé ce que tu as mis mais je pense à un truc comme ça :

 

Ta méthode : if( a == 1 || b ==2 && c == 1 || d ==1 ) )

voici ce que je veux dire : ( ( a == 1 || b ==2 ) && ( c == 1 || d ==1 ) ) )

 

Personnellement, je n'aime pas ces "define" mais c'est un choix, j'aurai plutot vu une fonction, je trouve cela beaucoup plus propre

 

Pour les types de tes fonctions, j'ai testé avec void à la place de tous tes long et ça marche sans problème, effectivement je ne suis pas vraiment sous windows ( plutot ubuntu ) mais Dev-C compile avec gcc, donc normalement tu devrais avoir le même résultat que moi.

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Pour les parenthèses, c'est une question d'optimisation ou d'une clarté pour celui qui regarde le code ?

Je les ai mise.

 

Moi ça veut toujours pas remarcher :P

Ceci dit, ça me l'a déjà fait, et puis le lendemain, ça marchait donc je ne peux rien confirmer à 100% !

J'ai juste changé les long par des void pour déclarer les fonctions comme je t'ai montré :P

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir Antoine, Damien, Dominique, Eric, bonsoir à tous,

 

Je serais plutôt d'avis de déplacer cette discussion sur Forums Zebulon.fr > Forums de Zebulon.fr > Programmation : vous bénéficieriez ainsi des réponses des membres de ce forum (dont Gen et KewlCat) et, de plus, vos échanges pourront être lus par les membres intéressés par le sujet !

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...